python re:将正则表达式替换为正则表达式

时间:2012-01-30 10:02:12

标签: python regex

我必须用找到的文本替换文本。像这样的Smth:

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”(忽略大小写)的单词将被两个单词 TEXT1 TEXT2 包围。返回值必须是unicode字符串。 我怎么才能意识到这一点?谢谢!

1 个答案:

答案 0 :(得分:7)

您可以使用捕获组:

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

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

有关详细说明,请参阅docs中的(...)\number部分。

顺便说一句,如果你不喜欢在组号之前逃避斜线,你可以改用原始字符串:

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