如何在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