0

次の正規表現がありますが、アドバイスが必要です。単語の形式を変更せずにテキストを強調表示するにはどうすればよいですか(大文字を大文字のままにする)。強調したい単語のリストがあるので、次のようになりました。

  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
4

1 に答える 1

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」に見えるようにしました)。

于 2012-06-06T21:03:15.390 に答える