带有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,您能告诉我如何使用字段宽度拆分这些字段吗?