如何在python 3中使用正则表达式匹配任何语言的字母?
re.match([a-zA-Z])
将匹配英语字符,但我希望同时支持所有语言。
我不希望匹配'
中的can't
或下划线或任何其他类型的格式。我希望我的正则表达式匹配:c
,a
,n
,t
,Å
,é
和中
答案 0 :(得分:18)
对于Python中的Unicode正则表达式工作,我强烈推荐以下内容:
regex
library代替标准re
,这不适用于Unicode正则表达式。 .encode
等等,那么您几乎肯定会做错事。执行此操作后,您可以安全地编写包含\w
或\p{script=Latin}
或\p{alpha}
和\p{lower}
等的模式,并知道这些模式都会执行{{3 }}。我更详细地解释了Python Unicode正则表达式业务的所有这些业务the Unicode Standard says they should。简短的故事是始终使用regex
而不是re
。
对于一般的Unicode建议,我也有关于Unicode正则表达式的in this answer,除了第3次谈话之外,其中大多数不是关于Python的,但其中大部分都是适应性的。
最后,始终several talks from last OSCON将恐惧上帝(或至少是Unicode)置于心中。
答案 1 :(得分:7)
使用\ w特殊序列有什么问题?
# -*- coding: utf-8 -*-
import re
test = u"can't, Å, é, and 中ABC"
print re.findall('\w+', test, re.UNICODE)
答案 2 :(得分:4)
你可以匹配
\p{L}
匹配任何代表脚本字母的Unicode代码点。也就是说,假设你实际上有一个支持Unicode的正则表达式引擎,我真的希望Python有这个引擎。
答案 3 :(得分:1)
构建您要匹配的所有字符的匹配类。这可能会变成非常,非常大。不,“所有汉字”没有RegEx简写;)
也许更容易匹配你不想要的东西,但即使这样,这个类也会变得非常大。
答案 4 :(得分:1)
import re text = "can't, Å, é, and 中ABC" print(re.findall('\w+', text))
这适用于Python 3.但它也匹配下划线。然而,这似乎按照我的意愿完成了工作:
import regex text = "can't, Å, é, and 中ABC _ sh_t" print(regex.findall('\p{alpha}+', text))
答案 5 :(得分:0)
对于葡萄牙语,请尝试使用以下语言:
[a-zA-ZÀ-ú ]+
答案 6 :(得分:0)
正如其他人所指出的那样,要保持所有现有语言中所有字母的最新数据库是非常困难的。但是在大多数情况下,您实际上并不需要这样,并且只需要支持几种选定的语言并根据需要添加其他语言,就可以完美地编写代码。
以下简单代码支持匹配Czech,German和Polish语言。可以从维基百科轻松获得字符集。
import re
LANGS = [
'ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťÚúŮůÝýŽž', # Czech
'ÄäÖöÜüẞß', # German
'ĄąĆćĘꣳŃńÓ󌜏źŻż', # Polish
]
pattern = '[A-Za-z{langs}]'.format(langs=''.join(LANGS))
pattern = re.compile(pattern)
result = pattern.findall('Žluťoučký kůň')
print(result)
# ['Ž', 'l', 'u', 'ť', 'o', 'u', 'č', 'k', 'ý', 'k', 'ů', 'ň']