正则表达式不返回预期结果

时间:2019-10-18 05:38:31

标签: python

我想返回一个数字字符串,但是正则表达式的输出与预期不符。

我使用正则表达式,我认为[\.\d+]*应该匹配。有一些数字,但输出似乎错误。

t1 = re.findall(r'[\-|\+]?\d+[\.\d+]*', a)

我对此模式进行了一些修复,但并非所有预期

输入:1234567890abcdef-123456.789.45879.237489237492..323.ae

结果:

['1234567890', '-123456.789', '789.45879', '45879.237489237492', '237489237492.', '.323', '323.']

但是我认为'237489237492.', '.323', '323.'不是必需的,发生了什么事?

2 个答案:

答案 0 :(得分:1)

如果您想将正/负浮点数与可选的小数部分匹配的一般方法,请使用:

t1 = re.findall(r'(?<!\S)[+-]?\d+(?:\.\d+)?\b', a)

Demo

答案 1 :(得分:0)

  

发生了什么事?

好吧

  

我认为[\.\d+]*应该匹配。有一些数字

“后跟一个或多个数字的句点”只是\.\d+。但是在方括号内,例如[\.\d+],它变成一个字符类:“一个句点,一个数字或一个加号”(转义句点无关紧要):

>>> import re
>>> re.findall('[\.\d+]', 'foo.bar+baz89')
['.', '+', '8', '9']

...然后是*,这意味着要搜索其中一个字符或多次。

(类似地,[\-|\+]?也将与|符号匹配。该部分所需的全部是[+-]?。也许您正在考虑使用|符号进行分组和交替,但是这样分组是通过()而不是[]完成的。)