2012-02-03 52 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() 
相关问题