繁体   English   中英

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

[英]Beginning (python) regex question

我很难弄清楚为什么以下正则表达式似乎不起作用。

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

re.search ("(\d*)", "prefix 1234 suffix").groups()
('',)

有趣的是,findall似乎可以工作:

re.findall("(\d*)", "prefix 1234 suffix")
['', '', '', '', '', '', '', '1234', '', '', '', '', '', '', '', '']

我知道为什么这样做有效,但是对于为什么搜索无效,我仍然感到困惑。 我的理解是match应该强制它匹配整个字符串,但是搜索应该找到字符串中任何地方的数字

因为.search运行一次搜索,并首先匹配即可。 由于\\d*根本不能匹配任何字符,因此它可以匹配的第一个位置是字符串的开头,不捕获任何字符-因此第一个捕获组是'' 它完全按照您的要求进行。

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

有用。 第一个示例的返回值对应于findall的返回值的第一个元素。 只需使用: r'(\\d+)'作为您的正则表达式。

search确实会在字符串中的任何位置找到数字,只是正则表达式告诉您找到数字零次或多次。 因此,它发现每个字符边框处的数字为零。

使用\\d+而不是\\d* \\d*表示零或多个,并且是您在字符串的偏移量0处获得的值。

尝试这个:

re.findall("(\d+)", "prefix 1234 suffix")

*更改为+ ,表示\\d必须匹配1次或多次。 您最初使用的*匹配零次或多次,这匹配了字符串中的每个字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM