我正在尝试使用正则表达式获取两个分隔符之间的(多行)内容
这是我正在解析的大文件的一个片段:
---------------------------------
CARTESIAN COORDINATES (ANGSTROEM)
---------------------------------
Co 0.000000 0.000000 0.000000
O 4.000000 0.000000 0.000000
H 4.584210 0.809570 0.000000
H 4.583362 -0.810106 -0.001552
----------------------------
CARTESIAN COORDINATES (A.U.)
----------------------------
NO LB ZA FRAG MASS X Y Z
0 Co 27.0000 0 58.930 0.000000 0.000000 0.000000
1 O 8.0000 0 15.999 7.558905 0.000000 0.000000
2 H 1.0000 0 1.008 8.662901 1.529866 0.000000
3 H 1.0000 0 1.008 8.661299 -1.530878 -0.002933
--------------------------------
INTERNAL COORDINATES (ANGSTROEM)
--------------------------------
Co 0 0 0 0.000000000000 0.00000000 0.00000000
O 1 0 0 4.000000000000 0.00000000 0.00000000
H 2 1 0 0.998351400325 125.81533088 0.00000000
H 2 1 3 0.998290967411 125.75782425 180.10977070
---------------------------
INTERNAL COORDINATES (A.U.)
---------------------------
Co 0 0 0 0.000000000000 0.00000000 0.00000000
O 1 0 0 7.558904535685 0.00000000 0.00000000
H 2 1 0 1.886610732031 125.81533088 0.00000000
H 2 1 3 1.886496530374 125.75782425 180.10977070
我只对“内部坐标(埃)”部分感兴趣(只有原子和坐标)。所以,这就是我想要保留的:
Co 0 0 0 0.000000000000 0.00000000 0.00000000
O 1 0 0 4.000000000000 0.00000000 0.00000000
H 2 1 0 0.998351400325 125.81533088 0.00000000
H 2 1 3 0.998290967411 125.75782425 180.10977070
这是我的正则表达式:
r"INTERNAL COORDINATES \(ANGSTROEM\)\n(--------------------------------)\n([\s\S]*?)\n(---------------------------)"
这是我的代码,到目前为止:
import re
import pandas as pd
with open(input_path, "r") as inp:
inp_content = inp.read()
int_coord = r"INTERNAL COORDINATES \(ANGSTROEM\)\n(--------------------------------)\n([\s\S]*?)\n(---------------------------)"
coord_matches = re.finditer(int_coord, inp_content, re.MULTILINE)
for i in coord_matches:
my_var = i.group(0)
print(my_var)
问题是我得到了包含分隔符的部分,如下所示:
---------------------------
INTERNAL COORDINATES (ANGSTROEM)
--------------------------------
Co 0 0 0 0.000000000000 0.00000000 0.00000000
O 1 0 0 1.200000000000 0.00000000 0.00000000
H 2 1 0 0.998351400325 125.81533088 0.00000000
H 2 1 3 0.998290967411 125.75782425 180.10977070
---------------------------
INTERNAL COORDINATES (ANGSTROEM)
--------------------------------
Co 0 0 0 0.000000000000 0.00000000 0.00000000
O 1 0 0 1.100000000000 0.00000000 0.00000000
H 2 1 0 0.998351400325 125.81533088 0.00000000
H 2 1 3 0.998290967411 125.75782425 180.10977070
---------------------------
INTERNAL COORDINATES (ANGSTROEM)
--------------------------------
Co 0 0 0 0.000000000000 0.00000000 0.00000000
O 1 0 0 1.000000000000 0.00000000 0.00000000
H 2 1 0 0.998351400325 125.81533088 0.00000000
H 2 1 3 0.998290967411 125.75782425 180.10977070
---------------------------
我怎样才能得到原子坐标
提前感谢您的帮助
您当前的正则表达式有点不正确,而且您正在访问python代码中的
group(0)
,这将为您提供完全匹配,您应该在group1中捕获并获取group1的内容。这是经过修改的正则表达式,它将完全满足您的需要Check this Demo
而这个python code demo
相关问题 更多 >
编程相关推荐