麻烦一个非常简单的正则表达式

时间:2012-04-10 02:34:00

标签: python regex

我正在使用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)。我在这里缺少什么?

4 个答案:

答案 0 :(得分:8)

问题是[0-9]*匹配零个或多个数字,因此非常乐意匹配零长度字符串。

与此同时,[0-9]+匹配一个或多个数字,因此需要至少查看一个数字才能捕获。


您可能希望使用findall并处理每行有多个数字的情况。

答案 1 :(得分:4)

你的第一个正则表达式匹配字母“a”之前的空字符串,所以它停在那里。你的第二个没有,所以它一直在努力。

答案 2 :(得分:4)

这是因为第一次尝试匹配一个空字符串 - 你要求它为“0或更多数字” - 所以第一次匹配在字符串的开头是空的。当您要求“一个或多个数字”时,第一个匹配从第一个'4'开始,并从那里继续直到数字结束。

答案 3 :(得分:3)

亲自看看。

提示:

  • *匹配0次或更多次
  • +匹配1次或多次

显然,第一种情况优先于第二种情况。并且正则表达式引擎完全没有问题,不匹配任何东西。 : - )