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']