2011-06-11 59 views
8

在.net中,您可以使用\p{L}来匹配任何字母,我如何在Python中执行相同的操作?也就是说,我想匹配任何大写字母,小写字母和重音字母。匹配任何unicode字母?

+1

参见:http://stackoverflow.com/questions/1832893/python-regex-matching-unicode-properties – 2011-06-11 07:08:54

+2

你知道''é''[不是2.x的一个'unicode' ](http://farmdev.com/talks/unicode/),对吧? – 2011-06-11 07:46:09

+2

尝试'r.match(u'é')' – 2011-06-11 07:55:20

回答

19

Python的re模块还不支持Unicode属性。但是,您可以使用re.UNICODE标志编译您的正则表达式,然后字符类速记\w也将匹配Unicode字母。

由于\w也将匹配数字,你需要然后减去那些从你的角色等级,带下划线一起:

[^\W\d_] 

将匹配任何Unicode字母。

>>> import re 
>>> r = re.compile(r'[^\W\d_]', re.U) 
>>> r.match('x') 
<_sre.SRE_Match object at 0x0000000001DBCF38> 
>>> r.match(u'é') 
<_sre.SRE_Match object at 0x0000000002253030> 
+0

聪明,但似乎并不奏效。查看更新。我从http://en.wikipedia.org/wiki/List_of_Unicode_characters复制了这个e,但似乎没有认出它。 – mpen 2011-06-11 07:44:51

+0

它完美地工作,但''é''不是一个Unicode对象,它是一串字节。 – 2011-06-11 07:48:32

+0

谢谢你们! Darn unicode :)除了问题以外,什么都不会造成。 – mpen 2011-06-11 17:10:37