python Regex返回匹配的字符串,但也返回无法匹配的空格

时间:2017-09-05 12:53:01

标签: python regex python-2.7

这是我的输入字符串:

str = '32 -3.723 +98.6 .357 0.86'

我的正则表达是:

print re.findall('[+-]?\d*\.?\d*',str)

它返回:

['32', '', '-3.723', '', '+98.6', '', '.357', '', '0.86', '']

我无法理解为什么所有这些空字符串介于两者之间。

1 个答案:

答案 0 :(得分:5)

  

我无法理解为什么所有这些遗漏都介于

之间

正则表达式的所有元素都是可选的,这意味着正则表达式可以(并且确实)匹配空字符串。

[+-]? - ZERO or one matches
\d*   - ZERO or more matches
\.?   - ZERO or one matches
\d*   - ZERO or more matches

在输入中的每个位置,正则表达式尝试找到最长匹配。例如,这里

'32 -3.723 +98.6 .357 0.86'
   ^

最长的匹配是空字符串。

有几种方法可以解决这个问题。我个人会在匹配后将它们过滤掉,而不是试图将正则表达式套在不匹配的空字符串中。