匹配任意语言的字母
我想知道如何在Python 3中使用正则表达式匹配任何语言的字母。
re.match([a-zA-Z])
这个写法只能匹配英语字母,但我希望能够同时支持所有语言的字母。
我不想匹配像 '
这样的字符,比如在 can't
这个词里,也不想匹配下划线或其他格式的字符。我希望我的正则表达式能够匹配:c
、a
、n
、t
、Å
、é
和 中
这些字母。
7 个回答
4
你可以使用下面的代码来匹配
\p{L}
这段代码可以匹配任何表示字母的Unicode字符。也就是说,前提是你使用的正则表达式引擎支持Unicode,我真心希望Python能够支持这一点。
7
使用 \w 这个特殊序列有什么问题吗?
# -*- coding: utf-8 -*-
import re
test = u"can't, Å, é, and 中ABC"
print re.findall('\w+', test, re.UNICODE)
24
在Python中处理Unicode正则表达式时,我强烈推荐以下几点:
- 使用 Matthew Barnett的
regex
库,而不是标准的re
库,因为后者不太适合处理Unicode正则表达式。 - 只使用Python 3,绝不要使用Python 2。你希望所有的字符串都是Unicode字符串。
- 只使用逻辑/抽象的Unicode字符,不要使用编码的字节字符串。
- 设置好你的编码方式后就不用再管它了。如果你发现自己需要手动调用
.encode
之类的,那你几乎肯定是做错了什么。 - 只使用宽字符集构建,这样代码点和代码单元是相同的,绝对不要使用窄字符集——这可能会让你在Unicode的兼容性上遇到麻烦。
- 在输入时将所有字符串标准化为NFD格式,输出时再转换为NFC格式。否则你可能无法获得可靠的行为。
一旦你这样做了,就可以安全地编写包含 \w
、\p{script=Latin}
、\p{alpha}
和 \p{lower}
等模式,并且可以确信这些都会按照 Unicode标准的规定来工作。我在 这个回答中详细解释了Python的Unicode正则表达式的相关内容。简单来说,就是总是使用 regex
而不是 re
。
关于一般的Unicode建议,我还有 几场关于Unicode正则表达式的讲座,虽然除了第三场讲座之外,其他的讲座大多不是关于Python的,但很多内容都是可以适用的。
最后,还有 这个回答,可以让你对Unicode有更深的认识。