Python正则表达式-是否可以在多个点中使用相同的组(命名或未命名)?

Python正则表达式-是否可以在多个点中使用相同的组(命名或未命名)?,python,regex,Python,Regex,我有一堆字符串,其中一些需要替换。但是,需要更换的零件前后的零件并不总是相同的。另外,字符串中需要替换的部分不能与正则表达式匹配,而不能与我不想替换的其他部分匹配。例如: "prefixA_REPLACEME_postfixA", "prefixB_SOMETHING_postfixB", "prefixA_LLAMAS_postfixC", "prefixB_DONTREPLACE_postfixA", 变成: "prefixA_NEWSTR_postfixA", "prefixB_NEWS

我有一堆字符串,其中一些需要替换。但是,需要更换的零件前后的零件并不总是相同的。另外,字符串中需要替换的部分不能与正则表达式匹配,而不能与我不想替换的其他部分匹配。例如:

"prefixA_REPLACEME_postfixA",
"prefixB_SOMETHING_postfixB",
"prefixA_LLAMAS_postfixC",
"prefixB_DONTREPLACE_postfixA",
变成:

"prefixA_NEWSTR_postfixA",
"prefixB_NEWSTR_postfixB",
"prefixA_NEWSTR_postfixC",
"prefixB_DONTREPLACE_postfixA",
我想用一个正则表达式来实现这一点,比如:

re.sub('(prefixA_).*(_postfixA)|(prefixB_).*(_postfixB)|(prefixA_).*(_postfixC)', '\\1NEWSTR\\2', stringToFix)
不幸的是,这不起作用,因为组1和组2是
(前缀)
(后缀)
,不管这是否是最终使用的正则表达式的一部分。我也不能用这个

re.sub('(?P<one>prefixA_).*(?P<two>_postfixA)|(?P<one>prefixB_).*(?P<two>_postfixB)|(?P<one>prefixA_).*(?P<two>_postfixC)', '\\1NEWSTR\\2', stringToFix)
还有一件事是不行的

re.sub('(prefixA_|prefixB).*(_postfixA|_postfixB|_postfixC)', '\\1NEWSTR\\2', stringToFix)
因为这将捕获第四个字符串,我不想匹配它


那么,有没有办法使任何未捕获的组都不被计数(这将使我的第一个正则表达式正确工作)?或者使用单个正则表达式执行此操作的任何其他方法?

您不能在同一正则表达式中多次定义命名捕获组(与.NET等其他正则表达式风格不同)。但是,由于您没有对pre-fixes和postfix进行任何操作,您可以简单地使用:

>>s=“”前缀\u替换我\u后缀a
…前缀\u某物\u后缀
…前缀为“\u LLAMAS\u postfix”
…前缀不替换后缀“”
>>>进口稀土

>>>print re.sub((?看起来您要做的是使用

if re.search("shouldReplaceRegex",matchstring): matchstring = re.sub("_.*?_","_yourReplacement_",matchstring)

我想我还不够清楚,但我认为我需要更换的零件种类繁多,任何能够匹配所有零件的零件都会匹配许多我不想更换的零件。
>>> s = """prefixA_REPLACEME_postfixA
... prefixB_SOMETHING_postfixB
... prefixA_LLAMAS_postfixC
... prefixB_DONTREPLACE_postfixA"""
>>> import re
>>> print re.sub("(?<=prefixA).*(?=postfixA)|(?<=prefixB).*(?=postfixB)|(?<=prefixA).*(?=postfixC)", "_NEWSTR_", s)
prefixA_NEWSTR_postfixA
prefixB_NEWSTR_postfixB
prefixA_NEWSTR_postfixC
prefixB_DONTREPLACE_postfixA
if re.search("shouldReplaceRegex",matchstring): matchstring = re.sub("_.*?_","_yourReplacement_",matchstring)