Python regex用于float或int,而不是将float拆分为两个float

2024-04-27 23:07:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个可以是int或float的文件中提取数据。我找到了一个正则表达式,它将从文件(\d+(\.\d+)?)中提取这两种类型,但是我遇到的问题是它将浮点拆分为两个。在

>>> import re
>>> line = "(gr_line (start 218.948 126.111) (end 218.948 143.637) (angle 90) (layer Edge.Cuts) (width 0.1) (tstamp 53D2B530))"
>>>
>>> print re.findall(r'\(start (\d+(\.\d+)?) (\d+(\.\d+)?)\)', line)
[('218.948', '.948', '126.111', '.111')]
>>>

这样做的目的是获得由(start n n)定义的起始坐标,但正如您所见,它取218.948并将其拆分为218.948和{}。与126.111的问题相同。在

如果输入字符串的起始方括号中有一个int,则得到以下结果:

^{pr2}$

这里的问题是添加的空索引-不是一个大问题,但有点不方便。在

如何格式化正则表达式,使其捕获一个浮点并返回该浮点,或者一个int并返回该int


Tags: 文件数据importrelayer类型linefloat
0条回答
网友
1楼 · 发布于 2024-04-27 23:07:25

使用(\d+(\.\d+)?)捕获并保存两个分组

试试这个:

(\d+(?:\.\d+)?)

这将只保存来自整个浮点的分组。在

网友
2楼 · 发布于 2024-04-27 23:07:25

print re.findall("\d+\.\d+|(?<=angle\s)\d+", line)

['218.948', '126.111', '218.948', '143.637', '90', '0.1']

不确定您使用的是findall,但这会发现一个或多个数字后跟一个.,后跟一个或多个数字“或”(由|表示)一个或多个数字,因此可以是浮点数或整数

相关问题 更多 >