【发布时间】:2021-08-30 21:51:01
【问题描述】:
我正在尝试从表达式中获取所有数值(整数、小数、浮点数、科学记数法),并希望将它们与不是实数而是名称一部分的数字区分开来。例如在下面的表达式中。
230FIC000.PV>=-2e3 211FIC00.PV <= 20 100fic>-20.4 tic200 >=45 tic100 <-2E-4 fic123 >1
前 230 不是数值,因为它是标签 (230FIC100.PV) 的一部分。
使用网络工具regexp.com,我想出了适用于上述表达式的以下表达式。
(?!\s)(?<!\w)[+-]?((\d+\.\d*)|(\.\d+)|(\d+))([eE][+-]?\d+)?(\s)|(?<!\w)[0-9]\d+(?<!\s)$
但是,当我尝试在 python re.findall() 中使用上述表达式时,我收到一个包含 5 个元组的列表,每个元组有 6 个元素。
import re
pat = r'(?!\s)(?<!\w)[+-]?((\d+\.\d*)|(\.\d+)|(\d+))([eE][+-]?\d+)?(\s)|(?<!\w)[0-9]\d+(?<!\s)$'
exp = '230FIC000.PV>=-2e3 211FIC00.PV <= 20 100fic>-20.4 tic200 >=45 tic100 <-2E-4 fic123 >1 '
matches = re.findall(pat,exp)
结果是
special variables
function variables
0:('2', '', '', '2', 'e3', ' ')
1:('20', '', '', '20', '', ' ')
2:('20.4', '20.4', '', '', '', ' ')
3:('45', '', '', '45', '', ' ')
4:('2', '', '', '2', 'e4', ' ')
len():5
我需要一些帮助来了解正在发生的事情,以及是否有任何方法可以以类似于 regexp.com 上发生的方式完成此操作。
【问题讨论】:
-
这能回答你的问题吗? re.findall not returning full match?