Python 打印从重新拆分中选择的值

Python 打印从重新拆分中选择的值,python,regex,string,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)

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

   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)
这会产生错误:

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

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

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)

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

可能类似于:

>>> 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']
>>重新导入
>>>s=“4 F=-0.1585709E+03 E0=-0.1585706E+03 d E=-0.612557E+01 mag=111.0022”

>>>关于findall(r'[+-]?(?我想试试下面的正则表达式

 ([-]?\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']

请看

的演示,字符串的格式是否总是相同的?是的…它总是相同的我正在做类似的事情…是的..修复
re
表达式是我要做的,而不是乱搞更多的
split
strip
…这是有效的,因为在
E0
中,0前面有
E
,但是我假设情况并非总是如此。例如,如果
s=“4f=-0.1585709e+03d0=-0.1585706e+03dee=-0.612557E+01mag=111.0022”
会失败,因为它会返回一个额外的0。您可能应该使用另一个否定断言,例如
(?@VincentSavard我们可以用
[a-zA-Z]替换
E
如果是这样的话。
['4 ', '-0.15857709E+03 ', '-0.15857306E+03 ', '-0.612557E+01 ', '111.0022']