我试图从字符串中获取值:
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
答案 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']
答案 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']
上的演示