在python中,我想从一行中提取子字符串,但保留子字符串中出现的空格。例如,在以下内容中:
34 -1 1 10 C2H4 + OH = C2H3 + H2O 8.020E+13 0.00 5955.0
35 -0.301029996 0.301029996 2 C2H3 + O2 = CH2O + HCO 4.000E+12 0.00 -250.0
36 -0.477121255 0.477121255 3 C2H3 + HCO = C2H4 + CO 6.034E+13 0.00 0.0
37 -1 1 10 C3H5 = C2H2+CH3 2.397E+48 -9.90 8.208E+04
38 -1 1 10 C2H4(+M) = C2H2+H2(+M) 1.800E+13 0.00 7.600E+04
39 -1 1 10 C2H3+O2 = C2H2+HO2 2.120E-06 6.00 9.484E+03
40 -0.505149978 0.505149978 3.2 C2H3+H = C2H2+H2 2.000E+13 0.00 2.500E+03
41 -0.505149978 0.505149978 3.2 C2H2+H(+M) = C2H3(+M) 3.110E+11 0.58 2.589E+03
42 -1 1 10 C2H2+O2 = HCCO+OH 2.000E+08 1.50 3.010E+04
43 -0.698970004 0.698970004 5 C2H2+O = HCCO+H 1.430E+07 2.00 1.900E+03
44 -1 1 10 C2H2+OH = CH2CO+H 2.190E-04 4.50 -1.000E+03
45 -0.477121255 0.477121255 3 CH2CO+H = CH3+CO 1.100E+13 0.00 3.400E+03
我想从第五个元素开始提取子字符串,直到从行结束的第三个元素开始,产生化学反应,其中空格完整如下:
C2H4 + OH = C2H3 + H2O
我尝试使用split
,但我丢失了空格:
chemical_reaction=' '.join(aline.split()[4:-3])
我明白了:
C2H4 + OH = C2H3 + H2O
答案 0 :(得分:4)
您可以使用此正则表达式:
^\s*(?:\S+\s+){4}(.+?)(?:\s+\S+){3}\s*$
并抓取由中间路径(.+?)
返回的捕获的组#1。在该组的任一侧,我们匹配4个非空格词和3个非空格词。