如何在python 3中使用正则表达式匹配来自任何语言的信件?任何语言的匹配字母
re.match([a-zA-Z])
将匹配英文字符,但我希望所有的语言同时支持。
我不希望匹配'
can't
或下划线或任何其他类型的格式。我希望我的正则表达式匹配:c
,a
,n
,t
,Å
,é
和中
。
如何在python 3中使用正则表达式匹配来自任何语言的信件?任何语言的匹配字母
re.match([a-zA-Z])
将匹配英文字符,但我希望所有的语言同时支持。
我不希望匹配'
can't
或下划线或任何其他类型的格式。我希望我的正则表达式匹配:c
,a
,n
,t
,Å
,é
和中
。
对于Python中的Unicode正则表达式的工作,我非常强烈地建议如下:
regex
library而不是标准re
,这是不是真的适合Unicode的常规表达式。.encode
等,您几乎肯定会做错事。一旦你这样做,你可以放心地编写模式,包括\w
或\p{script=Latin}
或\p{alpha}
和\p{lower}
等,并知道这些都将做什么the Unicode Standard says they should。我详细解释了Python Unicode正则表达式业务的所有这些业务in this answer。短故事总是使用regex
而不是re
。
对于一般的Unicode建议,我还有关于Unicode正则表达式的several talks from last OSCON,其中大部分除了第三次谈话外不是Python,但其中大部分是可适应的。
最后,总是有this answer将恐惧上帝(或至少是Unicode)放在心里。
建立您想要匹配的所有字符的匹配类。这很可能会变成非常大,非常大大。不,对于“所有汉字”没有正则表达式;)
也许它更容易匹配你不想要的东西,但即使如此,这个类也会变得非常大。
可以匹配
\p{L}
的任何Unicode码点代表一个脚本函相匹配。也就是说,假设你实际上有一个支持Unicode的正则表达式引擎,我真的希望Python能有这种引擎。
对Ruby也有效:) – Aleksey
使用\ w特殊序列有什么问题?
# -*- coding: utf-8 -*-
import re
test = u"can't, Å, é, and 中ABC"
print re.findall('\w+', test, re.UNICODE)
'\ w'还匹配数字'[0-9]'和下划线'_' – Toto
非常好,这是标准Python库下的正确答案(尽管我自己总是使用Unicode文字)。请注意,根据[UTS#18](http://unicode.org/reports/tr18/#Categories),一个“字”charàla'\ w'包含Unicode 6.0中的102,724个代码点,并且任何GC = L (100,520),GC = M(1492),GC = Nd(420),GC = N1(224)或GC = Pc(10)码点。 Python的''re'有点过时了,所以没有跟上标准,但它很接近真实。如果您想完全匹配Unicode标准,则可以使用Matthew Barnett的'regex';它还提供'\ p {alpha}',这就是你想要的。 – tchrist
@ M42:比这更复杂,但是。 Python的普通''re'库[对Unicode不好](http://stackoverflow.com/questions/7063420/perl-compatible-regular-expression-pcre-in-python/7066413#7066413),虽然它接近[ RL1.2a](http://unicode.org/reports/tr18/#Compatibility_Properties),但每个[RL1.2](http://unicode.org/reports/tr18/#Categories)缺少基本属性,每个属性的完整属性[RL2.7](http://www.unicode.org/reports/tr18/tr18-14.html#Full_Properties)。对于几乎任何使用Python的Unicode正则表达式,您应该使用Matthew Barnett的'regex'库。 – tchrist
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))
对于葡萄牙语,使用试试这个:
[a-zA-ZÀ-ú ]+
我想不出逻辑的方式去这一点。大多数语言不匹配英文字母。例如,如果您尝试在日语中匹配'k',那么您将无法做到这一点。他们的语言只包含'ka''ki''ku'''''ko',但它们用符号表示,因此K不会与任何特定字符匹配。为了达到这个目的,你基本上需要采用一种语言并将其翻译成英文等同语言。所以如果你在日语中遇到“早上好”,你必须在进行正则表达式匹配之前把它翻译成“konnichiwa”。 – Tony318
@ Tony318我碰巧有日语专业......这种方法在如此多的层面上是错误的...... – ty812
http://stackoverflow.com/questions/2039140/python-re-how-doi-i-匹配字母字符 – Marty