2012-06-06 48 views
0

我有以下正則表達式,我需要一些關於它的建議。我需要建議如何在不更改單詞形式的情況下突出顯示文本(大寫字母保持大寫)。我有一句話,我想強調的列表,所以我得到了以下內容:正則表達式python優化或文本hightlight的想法

def tagText(self,listSearch,docText): 
    docText=docText.decode('utf-8') 

    for value in listSearch: 
     replace = re.compile(ur""+value+"", flags=re.IGNORECASE | re.UNICODE) 
     docText = replace.sub(u"""<b style="color:red">"""+value+"""</b>""", docText, re.IGNORECASE | re.UNICODE) 

    return docText 
+2

如果您使用HTML解析器替換標籤,則不會出現此問題。不要使用正則表達式來解析HTML。託尼小馬將摧毀我們所有人! –

+0

[RegEx match open tags but XHTML self-contained tags]可能重複(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –

+0

不是它的不是HTML解析器。 – badc0re

回答

2

您需要在您的替換字符串使用佔位符,而不是字面值。

def tag_text(self, items, text): 
    text = text.decode('utf-8') 
    for item in items: 
     text = re.sub(
      re.escape(item), 
      ur'<b style="color:red">\g<0></b>', 
      text, 
      flags=re.IGNORECASE | re.UNICODE) 
    return text 

print tag_text(None, ["foo", "bar"], "text with Foo and BAR") 
# text with <b style="color:red">Foo</b> and <b style="color:red">BAR</b> 

(我也清理了一下你的功能,使它看起來更「pythonic」)。