2012-01-30 39 views
2

我必须用找到的文本替换文本。水木清华这样的:python的re:将正则表达式替换为正则表达式

regex = u'barbar' 
oldstring = u'BarBaR barbarian BarbaRONt' 
pattern = re.compile(regex, re.UNICODE | re.DOTALL | re.IGNORECASE) 
newstring = pattern.sub(.....) 
print(newstring) # And here is what I want to see 
>>> u'TEXT1BarBaRTEXT2 TEXT1barbarTEXT2ian TEXT1BarbaRTEXT2ONt' 

所以我要接受我的原文,其中每个匹配“BARBAR”(与忽略的情况下)的字将被两句话包围,TEXT1TEXT2。返回值必须是一个unicode字符串。 我怎样才能认识到它?谢谢!

回答

7

您可以使用捕获组为:

regex = u'(barbar)' 
... 
pattern.sub('TEXT1\\1TEXT2', oldstring) 
# => u'TEXT1BarBaRTEXT2 TEXT1barbarTEXT2ian TEXT1BarbaRTEXT2ONt' 

考虑到barbar括号使得正则表达式来捕捉这部分正则表达式的成组相匹配的字符串的每一个部分。因为它是第一个(也是唯一一个)捕获组,所以您可以在替换字符串中或在正则表达式本身中的任何位置将它称为\1

欲了解更多解释,请参阅docs中的(...)\number部分。

顺便说一句,如果你不喜欢前组号斜线逃脱你可以使用原始字符串代替:

pattern.sub(r'TEXT1\1TEXT2', oldstring) 
+0

人,这太酷了解决方案! – ghostmansd 2012-01-30 10:17:53