且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Python 2 re.sub 问题

更新时间:2022-03-28 05:24:21

在 Python 2.7 中,您需要将文本显式转换为 Unicode.请参阅下面的固定片段:

In Python 2.7, you need to explicitly convert text to Unicode. See the fixed snippet below:

# -*- coding: utf-8 -*-
import re
def highlight_text(st, kwlist, start_tag=None, end_tag=None):
    if start_tag is None:
        start_tag = '<span class="nom">'

    if end_tag is None:
        end_tag = '</span>'

    for kw in kwlist:
        st = re.sub(ur'\b' + kw.decode('utf8') + ur'\b', 
           u'{}{}{}'.format(start_tag.decode('utf8'), kw.decode('utf8'), end_tag.decode('utf8')),
           st.decode('utf8'), 0, re.U).encode("utf8")
    return st

st="Korais Ο Αδαμάντιος Κοραής (Σμύρνη, 27 Απριλίου 1748 – Παρίσι, 6 Απριλίου 1833), ήταν Έλληνας φιλόλογος με βαθιά γνώση του ελληνικού πολιτισμού. Ο Κοραής είναι ένας από τους σημαντικότερους εκπροσώπους του νεοελληνικού διαφωτισμού και μνημονεύεται, ανάμεσα σε άλλα, ως πρωτοπόρος στην έκδοση έργων αρχαίας ελληνικής γραμματείας, αλλά και για τις γλωσσικές του απόψεις στην υποστήριξη της καθαρεύουσας, σε μια μετριοπαθή όμως μορφή της με σκοπό την εκκαθάριση των πλείστων ξένων λέξεων που υπήρχαν στη γλώσσα του λαού."
kwlist = ['ελληνικού', 'Σμύρνη', 'Αδαμάντιος', 'Korais']
d = highlight_text(st, kwlist, start_tag=None, end_tag=None)
print(d)

参见演示

请注意,所有文字都使用 u 前缀声明,所有变量都经过 decodeed 并且 re.sub 结果是 encoded 回到 UTF8.

Note that all literals are declared with u prefix and all variables are decodeed and the re.sub result is encoded back to UTF8.