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

4 回答 4

8

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

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


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

于 2012-04-10T02:37:00.470 回答
4

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

于 2012-04-10T02:36:50.613 回答
4

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

于 2012-04-10T02:37:28.763 回答
3

你自己看。

暗示 :

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

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

于 2012-04-10T02:38:08.770 回答