2010-03-09 125 views

回答

3

你可以使用

\w+ 

与Unicode的标志。我假设你的名字没有数字或下划线的风险。

>>> re.findall('\w+', 'Márquez', re.U) 
['Márquez'] 

也似乎问号后失踪P(?P<name>[a-zA-Z]+)

+0

这并不好看的Python <3.0 - 我不喜欢使用与普通(非Unicode)字符串的UNICODE选项的想法。 – 2010-03-09 19:46:21

+0

@Jacek:为什么你非ASCII字符串不是Unicode? – SilentGhost 2010-03-09 19:48:30

+0

在Python 2.x的STR型和“XXXX”文字只包含一个字节的字符串。这些字节可能是特定编码中的某些字符,但是没有编码信息,这些字符只是字节。 '马尔克斯' 是:(77,195,161,114,113,117,101,122)(8个字节),如果您的编码是 'UTF-8' 或(77,225,114,113,117,101,122 )(7字节)如果编码是ISO 8859-1。当在ISO 8859-7中解码时,相同的值将是“Mαrquez”。相同的字节,不同的字符。不知道编码,我们不能谈论Unicode字符。 – 2010-03-09 20:30:47

0

对于Python < 3,你可能希望启用区域:

import locale 
locale.setlocale(locale.LC_ALL, '') 

然后用re.LOCALE选项会regexpes :

re.findall('\w+', 'Márquez', re.LOCALE) 

虽然,大概Unicode是更好的路要走,但它需要的数据进行解码和编码它到你的本地编码。

相关问题