。。
>>>re.match(r'(\w+)','a-b') gives an output
>>> <_sre.SRE_Match object at 0x7f51c0033210>
>>>re.match(r'(\w+):(\d+)','a-b:1')
>>>
为什么第二个regex条件没有给出match对象,尽管第一个regex为普通字符串匹配条件提供match对象,而不管字符串中是否有特殊字符?
但是,“,”w+将匹配[a-z,a-z,“。我不清楚为什么(\w+)为字符串“a-b”提供匹配的对象。如何检查给定字符串是否不包含任何特殊字符?
最佳答案
。
>>> re.match(r'(\w+)', 'a-b')
<_sre.SRE_Match object at 0x0000000002DE45D0>
>>> _.groups()
('a',)
如您所见,表达式匹配
a
。字符序列\w
只包含实际的单词字符,而不包含破折号之类的分隔符。。。。。。。
相反,您可以使用
a-b
,如果它可以在任何地方匹配表达式,那么它实际上会在整个字符串中查找。So there, you will get a result:>>> re.search(r'(\w+):(\d+)', 'a-b:1')
<_sre.SRE_Match object at 0x0000000002E01B58>
>>> _.groups()
('b', '1')
。
最后,如果还想匹配破折号,可以使用字符序列
\w+
,例如:>>> re.match(r'([\w-]+):(\d+)', 'a-b:1')
<_sre.SRE_Match object at 0x0000000002E01B58>
>>> _.groups()
('a-b', '1')