带有 unicode 字符的 Python 正则表达式错误?

Posted

技术标签:

【中文标题】带有 unicode 字符的 Python 正则表达式错误?【英文标题】:Python regex with unicode characters bug? 【发布时间】:2011-04-06 03:49:15 【问题描述】:

长话短说:

>>> re.compile(r"\w*").match(u"Français")
<_sre.SRE_Match object at 0x1004246b0>
>>> re.compile(r"^\w*$").match(u"Français")
>>> re.compile(r"^\w*$").match(u"Franais")
<_sre.SRE_Match object at 0x100424780>
>>> 

为什么它在正则表达式中不匹配带有^$ 的unicode 字符的字符串?据我了解,^ 代表字符串(行)的开头,$ - 代表字符串的结尾。

【问题讨论】:

【参考方案1】:

你需要指定UNICODE flag,否则\w就相当于[a-zA-Z0-9_],不包括字符'ç'。

>>> re.compile(r"^\w*$", re.U).match(u"Fran\xe7ais")
<_sre.SRE_Match object at 0x101474168>

【讨论】:

为什么这个麦芽汁:&gt;&gt;&gt; re.compile(r"\w*").match(u"Français")? @ak: 你确定匹配返回Français 而不是Fran 吗?请注意,如果没有 $,正则表达式直到最后才会匹配。 \w* 将完全匹配任何内容。 * 匹配 0 次或多次。

以上是关于带有 unicode 字符的 Python 正则表达式错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 的正则表达式中指定一系列 unicode 字符? [复制]

用于 unicode 大写单词的 Python 正则表达式

smtplib 在 Python 3.1 中发送带有 unicode 字符的邮件的问题

正则表达式——推荐使用 Unicode 编码

如何在 python 包装中使用 unicode 字符串用于带有 cython 的 c++ 类?

带有 unicode 和标点符号的 Javascript 正则表达式