正则表达式匹配中的变音符号(通过语言环境?)

时间:2012-09-02 22:27:35

标签: python regex locale

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

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)

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

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

2 个答案:

答案 0 :(得分:17)

您是否尝试使用re.UNICODE标记,如doc中所述?

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

快速搜索指向此thread,提供了一些解释:

  

re.LOCALE只是将角色传递给底层C库。它   实际上只适用于每个字符有1个字节的字节串。 UTF-8   将ASCII范围之外的代码点编码为每个字节数   代码点,re模块将每个字节视为一个   分开的角色。

答案 1 :(得分:0)

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