带有 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>
【讨论】:
为什么这个麦芽汁:>>> re.compile(r"\w*").match(u"Français")
?
@ak: 你确定匹配返回Français
而不是Fran
吗?请注意,如果没有 $
,正则表达式直到最后才会匹配。
\w*
将完全匹配任何内容。 *
匹配 0 次或多次。以上是关于带有 unicode 字符的 Python 正则表达式错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 的正则表达式中指定一系列 unicode 字符? [复制]
smtplib 在 Python 3.1 中发送带有 unicode 字符的邮件的问题