我想返回一个数字字符串,但是正则表达式的输出与预期不符。
我使用正则表达式,我认为[\.\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.'
不是必需的,发生了什么事?
答案 0 :(得分:1)
答案 1 :(得分:0)
发生了什么事?
好吧
我认为
[\.\d+]*
应该匹配。有一些数字
“后跟一个或多个数字的句点”只是\.\d+
。但是在方括号内,例如[\.\d+]
,它变成一个字符类:“一个句点,一个数字或一个加号”(转义句点无关紧要):
>>> import re
>>> re.findall('[\.\d+]', 'foo.bar+baz89')
['.', '+', '8', '9']
...然后是*
,这意味着要搜索其中一个字符零或多次。
(类似地,[\-|\+]?
也将与|
符号匹配。该部分所需的全部是[+-]?
。也许您正在考虑使用|符号进行分组和交替,但是这样分组是通过()
而不是[]
完成的。)