2010-08-31 43 views
2

长话短说:带有Unicode字符错误的Python正则表达式?

>>> 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字符在正则表达式^$匹配吗?据我所知^代表字符串(行)的开始和$ - 为它的结尾。

回答

5

您需要指定UNICODE flag,否则\w仅等效于[a-zA-Z0-9_],其中不包括字符'ç'。

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

为什么这个麦芽汁然后:'>>> re.compile(r“\ w *”)。match(u“Français”)'? – 2010-08-31 08:37:51

+0

@ak:你确定这场比赛的结果是“Français”而不是“Fran”吗?请注意,如果没有'$',直到结束才会匹配正则表达式。 – kennytm 2010-08-31 08:38:32

+1

'\ w *'绝对匹配任何东西。 '*'匹配0次或更多次。 – Turtle 2010-08-31 08:39:42