2

我正在尝试这样做:

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

1 回答 1

1

您需要将re.UNICODE标志传递给sub,如下所示:

val = re.sub(r'\b' + u_word + r'\b', unicode(new_word), u_text, flags=re.UNICODE)

\b是单词边界。如果没有re.UNICODE标志,“单词”仅包含 set 中的字符[a-zA-Z0-9_],因此αβ不会被视为“单词”。有关详细信息,请参阅文档re特别\b是 、\wre.UNICODE)。

供参考:

  • 如果new_word已经是一个 unicode 字符串(如您的示例中),unicode(new_word)是多余的,它返回new_wordunmodified
  • 在 Python 3.x 中,unicode 不再是特例。您的代码将在 Python 3.x 中按原样工作(减去unicode()因为不再需要而被删除)。
于 2012-12-06T21:07:01.600 回答