带有python错误的正则表达式

带有python错误的正则表达式,python,regex,Python,Regex,我正在学习python,并尝试使用regex。我习惯于用shell脚本(awk、grp和sed)来实现这一点,但需要用python来实现 在我的文件中,我有如下行: species,subl,cmp= 1 7 1 s1,torque=-0.65079E-11-0.59320E-15 species,subl,cmp= 1 6 1 s1,torque= 0.30782E-10 0.65641E-14 在shell脚本中,我可以使用 var_s1=`

我正在学习
python
,并尝试使用
regex
。我习惯于用shell脚本(
awk
grp
sed
)来实现这一点,但需要用
python
来实现

在我的文件中,我有如下行:

species,subl,cmp=    1    7    1    s1,torque=-0.65079E-11-0.59320E-15
species,subl,cmp=    1    6    1    s1,torque= 0.30782E-10 0.65641E-14
在shell脚本中,我可以使用

var_s1=`grep "species,subl,cmp=    $3    $4    $5" $tfile |sed -r 's/.*(.{11}).{12}/\1/'`
但是,尝试使用python代码执行此操作:

#!/usr/bin/python
import sys,math,re

infile=sys.argv[1]; oufile=sys.argv[2]
ifile=open(infile, 'r'); ofile=open(oufile, 'w')
pattern=r'species,subl,cmp=\s{4}(.*)\s{4}(.*)\s{4}(.*)\s{3}s1,torque=(.*)\s{1}(.*)'

ssc1=[];ssc2=[];ssc3=[]; s1=[]; t=[]
for line in ifile:
  match = re.search(pattern, line)
  if match:
    ssc1.   append(int(match.group(1)))
    ssc2.   append(int(match.group(1)))
    ssc3.   append(int(match.group(1)))
    s1.     append(float(match.group(1)))
    t.      append(float(match.group(1)))
#    ofile.write('%g %g %g' %(ssc1, s1,t))
#print('%5.3e %5.3e' s1,t)
for i in range(len(t)):
  print('%g %g %g' % (ssc1[i], s1[i], t[i]))

ifile.close(); ofile.close()
将所有结果显示为1:

$ python triel2.py out-Dy-eos2 tres
1 1 1
1 1 1
请告诉我哪里出了问题。 我跟在后面。但是作为一个初学者,也请建议我更好的方法。

改变这一点:

ssc1.   append(int(match.group(1)))
ssc2.   append(int(match.group(1)))
ssc3.   append(int(match.group(1)))
s1.     append(float(match.group(1)))
t.      append(float(match.group(1)))
为此:

ssc1.   append(int(match.group(1)))
ssc2.   append(int(match.group(2)))
ssc3.   append(int(match.group(3)))
s1.     append(float(match.group(4)))
t.      append(float(match.group(5)))
看起来“torque”后面的文本可能有问题。在文件示例的第一行中,数字之间没有空格。您可以根据字段宽度而不是分隔符拆分这两个数字。一种方法是替换正则表达式的这一部分:

torque=(.*)\s{1}(.*)
为此:

torque=(.{12})(.{12})
假设“torque”后面的数字都使用12个字符的字段宽度


另一种方法是将“torque”之后的所有内容与“(.*)”匹配,然后使用python字符串切片来拆分匹配的文本。

Hi,您能告诉我如何使用字段宽度拆分这些字段吗?