用于匹配多字名称的Python正则表达式

时间:2014-11-25 21:35:24

标签: python regex

我想只匹配字母字符,即a-zA-Z,它们也可以包含空格。目的是匹配任何多字名称,如'Vivek Jha'。我希望以下正则表达式能够正常工作:

re.match(r'^[aA-zZ\s]+$', name)

它适用于所有情况,但也匹配单词:'Vivek_Jha'

我不想和下划线匹配。这个_如何匹配。

我曾在Perl和Tcl中使用Regex,但我认为Python正在做更多我能想象的事情。

3 个答案:

答案 0 :(得分:4)

如果您只想匹配字母字符,也可以包含空格,只需使用:

r'^[a-zA-Z ]+$'

请注意aA-zZ对于匹配字母是错误的方式,您必须使用a-z表示小写,A-Z表示大写。 注意:

\s元字符用于查找空白字符。

空格字符可以是:

A space character
A tab character
A carriage return character
A new line character
A vertical tab character
A form feed character

答案 1 :(得分:3)

A-z正在捕获从ASCII字符A到ASCII字符z的所有内容。这包括_字符以及许多其他字符。有关此问题的详细信息,您可以查看Wikipedia's ASCII article

要解决此问题,您需要执行以下操作:

re.match(r'[a-zA-Z\s]+$', name)

这告诉Python只捕获ASCII范围a-zA-Z中的字符。

此外,我删除了^,因为默认情况下re.match匹配字符串的开头。

答案 2 :(得分:2)

尝试使用a-zA-Z代替aA-zZ

a-z之间没有任何东西,但字母,A-Z相同,但A-z之间有很多东西......显然包括下划线字符。