从re.split打印选定的值

时间:2016-03-04 17:18:09

标签: python regex string

我试图从字符串中获取值:

   4 F= -0.15857709E+03 E0= -0.15857306E+03  d E =-0.612557E+01  mag=   111.0022

仅打印数字,例如:

4 -0.15857709E+03 -0.15857306E+03 -0.612557E+01 111.0022

我在做:

indices = [1, 4, 7, 11, 14]
slist = re.split(" +|=|\n", line)# for i in indices)
qlist =[slist[i] for i in indices]
print(*qlist)

我需要做那么多吗? (我的意思是,我创建2个列表只是为了打印数字)。

有没有更好的方法(直接来自re.split,可能)?

我在尝试:

        print(re.split(" +|=|\n", line)[i] for i in indices)

产生错误:
< generator object< genexpr>在0x7f90bfbb80d8>

NB 这将创建一个二维列表,如:

1 -0.15245151E+03 -0.15244677E+03 -0.152452E+03 104.3267
2 -0.15552770E+03 -0.15552383E+03 -0.307619E+01 108.0036
3 -0.15807566E+03 -0.15807147E+03 -0.562415E+01 111.0046
4 -0.15857709E+03 -0.15857306E+03 -0.612557E+01 111.0022

3 个答案:

答案 0 :(得分:4)

也许是这样的:

>>> import re
>>> s = "4 F= -0.15857709E+03 E0= -0.15857306E+03  d E =-0.612557E+01  mag=   111.0022"
>>> re.findall(r'[+-]?(?<!E)\d+(?:\.\d+(?:E[+-]\d+)?)?', s)
['4', '-0.15857709E+03', '-0.15857306E+03', '-0.612557E+01', '111.0022']

Regular expression visualization

Debuggex Demo

答案 1 :(得分:2)

您可以使用以下正则表达式:

import re

s = '4 F= -0.15857709E+03 E0= -0.15857306E+03  d E =-0.612557E+01  mag=   111.0022'
qlist = [s.split()[0]] + [x.strip() for x in re.findall(r'(?<==)\s*[^ ]+', s)]
print(qlist)

<强>输出

['4', '-0.15857709E+03', '-0.15857306E+03', '-0.612557E+01', '111.0022']

为简单起见,使用str.split()提取第一个数字。然后使用正则表达式提取剩余的数字字符串,并在必要时在任一端剥去空格。

答案 2 :(得分:0)

我想尝试使用正则表达式。

 ([-]?\d+(?:\.\d+(?:E[+-]\d+)?)?)(?=(?:\s|$))

示例代码。

import re
p = re.compile(r'([-]?\d+(?:\.\d+(?:E[+-]\d+)?)?)(?=(?:\s|$))')

test_str = "4 F= -0.15857709E+03 E0= -0.15857306E+03  d E =-0.612557E+01  mag=   111.0022"

matches = re.findall(p, test_str)

鉴于您的示例输入字符串和正在运行的演示,输出将是

['4 ', '-0.15857709E+03 ', '-0.15857306E+03 ', '-0.612557E+01 ', '111.0022']

请参阅https://regex101.com/r/sO0aD8/3

上的演示