Python 正则表达式 re.match,为什么这段代码不工作?

18 投票
1 回答
28794 浏览
提问于 2025-04-17 16:14

这段代码是用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

我有几个问题:

  1. 为什么re.match没有找到任何东西?
  2. 在模式中有括号和没有括号有什么区别?

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

撰写回答