2012-02-03 73 views
1

我讀過的Unicode字符串here一個很好的解決方案,但我需要檢查整個字符串是字母或空格或破折號,我想不出任何解。該示例沒有按照我的要求工作。如何檢查unicode字符串被字母,空格和破折號只有

name = u"Василий Соловьев-Седой" 
r = re.compile(r'^([\s\-^\W\d_]+)$', re.U) 
r.match(name) -> None 
+1

請準確定義你所說的「字母」,「空間」和「短線」的意思。 – 2012-02-03 11:18:09

+0

字母 - 任何Unicode字母,空格 - 空間:),破折號 - 「 - 」 符號 – 2012-02-03 11:19:47

+2

我想他的意思[A-ZA-Z [UNICODE_LETTERS] - ] *,這裏的問題是[UNICODE_LETTERS]吧? – Eregrith 2012-02-03 11:20:18

回答

4
r = re.compile(r'^(?:[^\W\d_]|[\s-])+$', re.U) 

[^\W\d_]匹配任何字母(通過匹配任何字母數字字符除了數字和下劃線)。

當然[\s-]匹配空格和破折號。

+0

你測試此字符串上U 「ВасилийСоловьев-Седой」?結果沒有結果。 – 2012-02-03 11:29:06

+0

@Tim在研究這個,我發現你的其他答案http://stackoverflow.com/questions/1716609/how-to-match-cyrillic-characters-with-a-regular-expression你能解釋的區別?是否re.U允許令牌\ W與\ p unicode令牌相同? – 2012-02-03 11:31:57

+0

我的錯誤。我測試了錯誤字符串的正則表達式。 @Tim您的解決方案非常完美。謝謝。 – 2012-02-03 11:36:56

0

,如果你只想檢查:

name = u"Василий Соловьев-Седой"; 
name = name.replace("-","").replace(" ",""); 
name.isalpha() 
相關問題