Python2re.sub公司发行

2024-10-06 10:34:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个函数,它用HTML标记包围的匹配替换子字符串匹配。此函数将主要使用英语和希腊语的字符串。在

功能:

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(r'\b' + kw + r'\b', '{}{}{}'.format(start_tag, kw, end_tag), st)
    return st

除了第一个子串【Korais】:st=“Korais:st=“Korais Korais”st=“Korais Korais Korais除第一子串[Korais:st=“Korais Korais Korais Korais除第一子串[Korais]:st=<“Korais”的希腊语除第一子串[科赖]以外的希腊希腊语测试字符串除第一子串[Korais]:st=<<<Koraais]以外的希腊希腊希腊语测试字符串测试字符串的希腊语的测试字符串:st=<

测试代码:

^{pr2}$

当我运行代码[st is the above string]时,只有英语的子字符串被标记。希腊语substr被忽略。请注意,我在Python2.7上运行了上面的块。当我使用python3.4时,所有的子字符串都会被替换。 另一个问题是,当我在Flask应用程序中运行上述函数时,它会抛出一个错误:正则表达式意外结束。在

如果可能的话,我应该如何在不使用外部库的情况下解决上述问题? 我已经两天没头发了。在


Tags: 函数字符串标记noneifistagstart
2条回答

在python2.7中,需要显式地将文本转换为Unicode。请参见下面的固定片段:

# -*- 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)

demo

注意,所有的文字都用u前缀声明,所有变量都是decodeed,re.sub结果是encoded返回UTF8。在

English get tagged. Greek substr are ignored.

你的st来自哪里?请注意,在python2.x中'μορφή' != u'μορφή'中,您可能正在比较str和{}。在

建议:尽可能在任何地方使用unicode,例如:

kwlist = [u'ελληνικού', u'Σμύρνη', u'Αδαμάντιος', u'Korais']

相关问题 更多 >