2012-04-10 121 views
4

我正在使用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

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

8

问题是[0-9]*匹配零个或多个数字,所以它很乐意匹配零长度的字符串。

同时,[0-9]+匹配一个或多个数字,所以它需要看到至少一个数字才能被捕获。


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

4

这是因为第一次尝试匹配一个空字符串 - 你要求它为“0或更多数字” - 所以第一个匹配在字符串开头是空的。当你询问“一个或多个数字”时,第一场比赛从第一场比赛开始,然后从那里继续直到数字结尾。

3

看看你自己。

提示:

  • *匹配0或更多的次
  • +比赛1或更多的吨imes

显然,第一个案件比第二个案件有更高的优先权。正则表达式引擎完全没有问题,不匹配任何东西。 :-)