2015-06-24 70 views
2

我知道這個問題已經在這裏回答了Case insensitive replace但我的是有點不同。Python不區分大小寫查找並替換爲同一個發現的詞

我想要的是搜索文本中的某些關鍵字,並用<b></b>圍繞它們進行替換。且存在四個不同的可能性通過一個例子說明如下:

關鍵詞 = ['hell', 'world']

輸入句子 =​​

預期輸出1 = '<b>Hell</b> is a wonderful place to say hello and sell shells' - (未被關鍵字'hell'取代發現的單詞'地獄'。只有完整的匹配取代。

預期輸出2 = '<b>Hell</b> is a wonderful place to say <b>hello</b> and sell shells' - (僅與被替換的關鍵字開始匹配的單詞注意,整個單詞被替換得到即使匹配是局部

預期輸出3 = '<b>Hell</b> is a wonderful place to say <b>hello</b> and sell <b>shells</b>' - (地獄的任何發生替換,但由完全匹配的單詞

預期輸出4 = '<b>Hell</b> is a wonderful place to say <b>hell</b>o and sell s<b>hell</b>s' - (地獄的任何發生被替換而不是由完全匹配的單詞。匹配詞的外殼保持完整

鏈接的SO問題,用找到的關鍵字替換單詞,這不是我想要的。我想保持輸入句子的外殼完好無損。有人能幫我找到解決所有上述四種情況?

,我已經試過代碼:

import re 
insensitive_hippo = re.compile(re.escape('hell'), re.IGNORECASE) 
insensitive_hippo.sub('hell', 'Hell is a wonderful place to say hello and sell shells') 
'hell is a wonderful place to say hello and sell shells' 

但這不守發現字完好。

+0

什麼是你期望的輸出? –

+0

考慮到輸入句子和關鍵字列表,這四種類型的翻譯文本是您希望四個輸入句子的期望輸出 –

+0

?你必須顯示你的企圖.. –

回答

2
print re.sub(r"\b(hell)\b",r"<b>\1</b>",x,flags=re.I) 

print re.sub(r"\b(hell\S*)",r"<b>\1</b>",x,flags=re.I) 

print re.sub(r"\b(\S*hell\S*)",r"<b>\1</b>",x,flags=re.I) 

print re.sub(r"(hell)",r"<b>\1</b>",x,flags=re.I) 

輸出:

<b>Hell</b> is a wonderful place to say hello and sell shells 
<b>Hell</b> is a wonderful place to say <b>hello</b> and sell shells 
<b>Hell</b> is a wonderful place to say <b>hello</b> and sell <b>shells</b> 
<b>Hell</b> is a wonderful place to say <b>hell</b>o and sell s<b>hell</b>s 
+1

非常感謝@vks。這工作! –

相關問題