10

我很惊讶我无法在正则表达式中匹配德语变音符号。我尝试了几种方法,大多数涉及设置语言环境,但到目前为止无济于事。

locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
re.findall(r'\w+', 'abc def g\xfci jkl', re.L)
re.findall(r'\w+', 'abc def g\xc3\xbci jkl', re.L)
re.findall(r'\w+', 'abc def güi jkl', re.L)
re.findall(r'\w+', u'abc def güi jkl', re.L)

这些版本都没有正确匹配 umlaut-u (ü) 和\w+. 同样删除re.L标志或在模式字符串前面加上u(使其成为unicode)对我没有帮助。

有任何想法吗?如何re.L正确使用标志?

4

2 回答 2

17

您是否尝试过使用该re.UNICODE标志,如文档中所述?

>>> re.findall(r'\w+', 'abc def güi jkl', re.UNICODE)
['abc', 'def', 'g\xc3\xbci', 'jkl']

快速搜索指向该线程,该线程给出了一些解释:

re.LOCALE 只是将字符传递给底层 C 库。它实际上只适用于每个字符有 1 个字节的字节串。UTF-8 将 ASCII 范围之外的代码点编码为每个代码点的多个字节,并且 re 模块会将这些字节中的每一个视为一个单独的字符。

于 2012-09-02T22:30:09.313 回答
0

在我的情况下,\S给了我比 更好的结果\w,加上将文件保存为 utf-8,加上使用re.UNICODE

于 2013-04-06T15:40:35.620 回答