我正在使用python尝试编写一些简单的代码,通过正则表达式查找字符串并查找内容。在这个字符串中:
and the next nothing is 44827
我希望我的正则表达式只返回数字。
我已经设置了我的python程序:
buf = "and the next nothing is 44827"
number = re.search("[0-9]*", buf)
print buf
print number.group()
number.group()返回的是一个空字符串。但是,当正则表达式是:
number = re.search("[0-9]+", buf)
正确提取完整数字(44827)。我在这里缺少什么?
答案 0 :(得分:8)
问题是[0-9]*
匹配零个或多个数字,因此非常乐意匹配零长度字符串。
与此同时,[0-9]+
匹配一个或多个数字,因此需要至少查看一个数字才能捕获。
您可能希望使用findall
并处理每行有多个数字的情况。
答案 1 :(得分:4)
你的第一个正则表达式匹配字母“a”之前的空字符串,所以它停在那里。你的第二个没有,所以它一直在努力。
答案 2 :(得分:4)
这是因为第一次尝试匹配一个空字符串 - 你要求它为“0或更多数字” - 所以第一次匹配在字符串的开头是空的。当您要求“一个或多个数字”时,第一个匹配从第一个'4'开始,并从那里继续直到数字结束。
答案 3 :(得分:3)
亲自看看。
[0-9]*
http://regexr.com?30je4 [0-9]+
http://regexr.com?30je7 提示:
*
匹配0次或更多次+
匹配1次或多次显然,第一种情况优先于第二种情况。并且正则表达式引擎完全没有问题,不匹配任何东西。 : - )