Skip to main content
 首页 » 编程设计

python用正则表达式查找替换字符串中的非拉丁词

2025年05月04日29wayfarer

我正在尝试这样做:

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' 
>>>  

请您参考如下方法:

您需要将 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 .
  • 在 Python 3.x 中,unicode 不再是特例。您的代码可以像在 Python 3.x 中一样工作(减去 unicode(),因为不再需要它而被删除)。