Python 正则表达式 re.match,为什么这段代码不工作?
这段代码是用Python写的,
import re
s='1 89059809102/30589533 IronMan 30 Santa Ana Massage table / IronMan 30 Santa Ana Massage table'
pattern='\s(\d{11})/(\d{8})'
re.match(pattern,s)
它返回的是“none”。
我试着去掉了括号,
pattern='\s\d{11}/\d{8}'
结果还是返回none
。
我有几个问题:
- 为什么re.match没有找到任何东西?
- 在模式中有括号和没有括号有什么区别?
1 个回答
43
re.match
是从字符串的开头开始“匹配”的,但这里还有一个额外的 1
。
可以用 re.search
来代替,它会在字符串的任何地方进行“搜索”。在你的情况下,它也能找到一些东西:
>>> re.search(pattern,s).groups()
('89059809102', '30589533')
如果你把模式中的括号去掉,它仍然会返回一个有效的 _sre.SRE_Match
对象,但里面的 groups
会是空的:
>>> re.search('\s\d{11}/\d{8}',s).groups()
()