我必须用找到的文本替换文本。像这样的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字符串。 我怎么才能意识到这一点?谢谢!
答案 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)