我无法弄清楚为什么以下正则表达式似乎不起作用。
我知道我可以组成其他正则表达式来完成这项工作,但我认为这个应该可以。
re.search ("(\d*)", "prefix 1234 suffix").groups()
('',)
有趣的是,findall 似乎有效:
re.findall("(\d*)", "prefix 1234 suffix")
['', '', '', '', '', '', '', '1234', '', '', '', '', '', '', '', '']
我明白为什么会这样,但我仍然对为什么搜索不起作用感到困惑?我的理解是 match 应该强制它匹配整个字符串,但是搜索应该找到字符串中任意位置的数字
请您参考如下方法:
因为 .search 运行搜索一次,并在第一时间进行匹配。由于 \d* 根本不能匹配任何字符,它可以匹配的第一个位置是字符串的开头,不捕获任何字符——所以第一个捕获组是 ''。它完全按照您的要求去做。
如果您改用正则表达式 (\d+),它必须匹配至少一个 数字,那么它可以匹配的第一个位置是 1,它将捕获 1234。
