。。

>>>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')

10-07 13:28
查看更多