我很难弄清楚为什么下面的正则表达式似乎不起作用。
我知道我可以形成其他正则表达式来使这个工作,但我认为这个应该能工作。
re.search ("(\d*)", "prefix 1234 suffix").groups()
('',)
有趣的是,findall似乎奏效了:
re.findall("(\d*)", "prefix 1234 suffix")
['', '', '', '', '', '', '', '1234', '', '', '', '', '', '', '', '']
我明白为什么这样做,但我仍然困惑于为什么搜索不起作用?我的理解是,匹配应该强制它匹配整个字符串,但是搜索应该在字符串中的任何位置找到数字。
发布于 2011-01-24 06:44:33
因为.search
只运行一次搜索,并且首先可以匹配。因为\d*
完全不能匹配字符,所以它可以匹配的第一个位置是字符串的开头,没有捕获字符--所以第一个捕获组是''
。就像你让它做的那样。
如果您已经做了regex (\d+)
,它必须匹配至少一个数字,那么它可以匹配的第一个位置是在1
,它将捕获1234
。
发布于 2011-01-24 06:43:50
它起作用了。第一个示例的返回值对应于findall
返回值的第一个元素。只需使用:r'(\d+)'
作为您的正则表达式。
search
确实在字符串中的任何位置找到了数字,它只是告诉您查找0或更多次数字的正则表达式。所以它发现,每个字符边框都是零位数。
发布于 2011-01-24 06:46:16
使用\d+
,而不是\d*
。\d*
的意思是零或更多,而这个零是在字符串中偏移量0处得到的。
https://stackoverflow.com/questions/4783275
复制相似问题