2

我对 python 正则表达式操作有疑问。你去我的样本测试。

>>>re.match(r'(\w+)','a-b') gives an output
>>> <_sre.SRE_Match object at 0x7f51c0033210>

>>>re.match(r'(\w+):(\d+)','a-b:1')
>>> 

为什么第二个正则表达式条件不提供匹配对象,尽管第一个正则表达式为正常字符串匹配条件提供匹配对象,而不管字符串中是否有特殊字符?

但是,\w+ 将匹配 [az,AZ,_]。我不清楚为什么 (\w+) 为字符串“ab”提供匹配的对象。如何检查给定的字符串是否不包含任何特殊字符?

4

3 回答 3

6
于 2013-10-25T12:44:04.730 回答
2

第一个匹配a- 一个或多个单词字符。

第二个是一个或多个单词字符,后面紧跟一个:没有...

[a-z,A-Z,_](相当于\w) 表示azAZ - 在这种情况下,它不是文字连字符,如果您确实想要连字符,请将其作为字符类的第一个或最后一个字符。

于 2013-10-25T12:17:50.523 回答
1

Match的文档

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的 MatchObject 实例。

match如果在字符串的开头找到匹配项,该方法将返回匹配的对象。(\w+)匹配. a_a-b

print re.match(r'(\w+)','a-b').group()

将打印

a

在第二种情况 ( (\w+):(\d+)) 中,实际匹配的字符串是b:1,它不在字符串的开头。这就是它返回的原因None

如何检查给定的字符串是否不包含任何特殊字符?

我会说,您使用的第二个正则表达式应该足够了,match函数应该足够了。我坚持,因为和http://docs.python.org/2.7/library/re.html#search-vs-matchmatch之间存在差异matchsearch

记得你

于 2013-10-25T12:45:57.877 回答