2012-01-30 71 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