开始(python)正则表达式问题

Hor*_*ude 1 python regex

我无法弄清楚为什么以下正则表达式似乎不起作用.

我知道我可以形成其他正则表达式来使这项工作,但我认为这应该工作.

re.search ("(\d*)", "prefix 1234 suffix").groups()
('',)
Run Code Online (Sandbox Code Playgroud)

有趣的是,findall似乎有效:

re.findall("(\d*)", "prefix 1234 suffix")
['', '', '', '', '', '', '', '1234', '', '', '', '', '', '', '', '']
Run Code Online (Sandbox Code Playgroud)

我理解为什么会有效,但我仍然对为什么搜索不起作用感到困惑?我的理解是匹配应该强制它匹配整个字符串,但搜索应该在字符串中的任何位置找到数字

hob*_*bbs 6

因为.search运行一次搜索,并且它首先匹配.因为\d*根本不匹配任何字符,它可以匹配的第一个位置是字符串的开头,不捕获任何字符 - 所以第一个捕获组是''.它正是你所要求的.

如果你(\d+)改为使用正则表达式,它必须匹配至少一个数字,那么它可以匹配的第一个位置就是它将被1捕获1234.