2012-07-09 27 views
3

我想用正則表達式替換一些內容。我能夠做到這一點使用下面的方法用Python替換內容中的確切詞

EX: """ The search technique is usefull, the search technique is usefull """ 
old = 'the' 
toreplace = "<span class='highlight' STYLE='background-color:yellow'>" + old + "</span>" 
pattern = re.compile(re.escape(old), re.I) 
highlighted_txt = re.sub(pattern,toreplace,A,count) 

" <span class='highlight' STYLE='background-color:yellow'>the</span> search tech 
nique is usefull, <span class='highlight' STYLE='background-color:yellow'>the</s 
pan> search technique is usefull " 

,但我想要做的就是替換舊詞與究竟是什麼發現像第二內容是什麼「的」應與

取代
<span class='highlight' STYLE='background-color:yellow'>The</span> 

" <span class='highlight' STYLE='background-color:yellow'>the</span> search tech 
nique is usefull, <span class='highlight' STYLE='background-color:yellow'>The</s 
pan> search technique is usefull " 

回答

0

這個固定我的問題

toreplace = "<span class='highlight' STYLE='background-color:yellow'>\g<0></span>" 
0

將關鍵字放入捕獲組中。

old = '(the)' 

,並使用捕獲文本替換(注意\1,表示第一個捕獲組):

toreplace = r"<span class='highlight' STYLE='background-color:yellow'>\1</span>" 
0

在你需要使用反向引用(見http://docs.python.org/library/re.html),例如這種情況下:

old = 'the (cat|dog|horse)' 

replace = '<span>the old \1</span>' 

將用「老貓」代替「貓」。

在你的情況下,

replace = "..." + '\1' + "..." 
1

更換

replace = "..." + old + "..." 

當使用re.sub你可以把\0替換字符串將被擴展到搜索表達式的匹配。您需要確保\0未被解釋爲八進制轉義符,因此使用原始字符串文字很方便。例如,您可以將代碼的第三行更改爲

toreplace = r"<span class='highlight' STYLE='background-color:yellow'>\0</span>" 

並且您應該看到您正在查找的行爲。

由於您要使用整個匹配的字符串,因此不需要在正則表達式中創建任何組。 0組總是被定義爲整個匹配的字符串。

+0

+1。我忘了'\ 0'組。 – nhahtdh 2012-07-09 06:27:45

+0

當我嘗試這個我得到「 \ x00搜索技巧是有用的, \ x00 < /span>搜索技術是有用的「要替換的詞不會出現在html頁面 – Rakesh 2012-07-09 13:07:34

+0

@Rakesh,不要忘記打開替換字符串的雙引號之前的* r *。它阻止了反斜槓轉義的通常處理。在這種情況下,如果沒有* r *,'\ 0'會被解釋爲一個八進制轉義符(如答案中所述),從而在結果中給出'\ x00'字符。或者,您可以在0之前轉義反斜槓,並將其保留爲普通字符串。 – 2012-07-09 14:48:33