适用于float或int的Python正则表达式,而未将float分为两个float

Set*_*erg 1 python regex

我正在尝试从可以是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')]
>>>
Run Code Online (Sandbox Code Playgroud)

这样做的目的是获得由(start nn)定义的起始坐标,但是正如您所看到的,它需要218.948并将其拆分为218.948.948。与相同的问题126.111

如果输入字符串的起始括号中有一个整数,则得到以下信息:

>>> line = "(gr_line (start 218.948 126) (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', '')]
>>>
Run Code Online (Sandbox Code Playgroud)

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

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

cel*_*tas 5

您正在捕获并保存两个分组 (\d+(\.\d+)?)

尝试这个:

(\d+(?:\.\d+)?)
Run Code Online (Sandbox Code Playgroud)

这样只会保存整个浮动对象中的分组。