Python提取子字符串但保留空格

时间:2016-01-25 19:25:28

标签: python regex string

在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

1 个答案:

答案 0 :(得分:4)

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

^\s*(?:\S+\s+){4}(.+?)(?:\s+\S+){3}\s*$

并抓取由中间路径(.+?)返回的捕获的组#1。在该组的任一侧,我们匹配4个非空格词和3个非空格词。

RegEx Demo