我正在尝试这样做:
val = re.sub(r'\b' + u_word +'\b', unicode(new_word), u_text)
(所有字符串都是非拉丁语。)
根本不起作用!
是否可以使用正则表达式在非拉丁文本中查找替换非拉丁文字(整个单词)? 怎么样?
编辑:
如果你想测试这些字符串:
>>> u_word = u'αβ'
>>> u_text = u'αβγ αβ αβγδ δαβ'
>>> new_word = u'χχ'
>>> val = re.sub(r'\b' + u_word +r'\b', unicode(new_word), u_text)
>>> val
u'\u03b1\u03b2\u03b3 \u03b1\u03b2 \u03b1\u03b2\u03b3\u03b4 \u03b4\u03b1\u03b2'
>>> u_text
u'\u03b1\u03b2\u03b3 \u03b1\u03b2 \u03b1\u03b2\u03b3\u03b4 \u03b4\u03b1\u03b2'
>>>
答案 0 :(得分:1)
您需要将 re.UNICODE
标记传递给sub
,如下所示:
val = re.sub(r'\b' + u_word + r'\b', unicode(new_word), u_text, flags=re.UNICODE)
\b
是一个单词边界。如果没有re.UNICODE
标记,则“单词”仅包含集合[a-zA-Z0-9_]
中的字符,因此αβ
不会被视为“单词”。有关详细信息,请参阅the re
documentation(具体为\b
,\w
和re.UNICODE
)。
供参考:
new_word
已经是unicode字符串(如您的示例所示),则unicode(new_word)
是多余的,it returns new_word
unmodified。unicode()
,因为不再需要它而被删除了。)