python - 在 Python 上使用正则表达式查找表达式中的任何数值
问题描述
我正在尝试从表达式中获取所有数值(整数、小数、浮点数、科学记数法),并希望将它们与不是实数而是名称一部分的数字区分开来。例如在下面的表达式中。
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 上发生的类似方式完成此操作。
解决方案
这应该照顾它。(所有项目都是字符串)
import re
st = '230FIC000.PV>=-2e3 211FIC00.PV <= 20 100fic>-20.4 tic200 >=45 tic100 <-2E-4 fic123 >1'
re.findall(r'-?[0-9]+\.?[0-9]*(?:[Ee]\ *-?\ *[0-9]+)|-?\d+\.\d+|\b\d+\b', st)
参考:如何从字符串中提取数字,
推荐阅读
- neo4j - 如何幂等地创建 Neo4j 全文索引?
- json - 标头名称必须是邮递员中的有效 HTTP 令牌 ["Authorization"]
- javascript - 将 AngularJS 指令导入 Angular 2+ 组件不起作用
- python - django-rest-framwork: AttributeError, 'Response' object has no attribute 'title'
- reactjs - 从 React 道具启动 SVG 动画
- python-3.x - 如何在 django 中上传多个不同的图像及其关联名称,基本上是创建与其名称关联的图像数据库
- mongodb - PyMongo 查询,多条语句指向 BSON 文档的同一部分
- python-3.x - Netfilterqueue,set_payload 不使用 python3 更改数据包
- ios - Azure SQL 数据库新创建的表不允许插入数据但所有旧表都允许插入数据
- javascript - 在 Vue.js 的监视中使用 try catch