python - 带有python错误的正则表达式

标签 python regex

我正在学习 python,并尝试使用 regex。我习惯用 shell 脚本(awkgrpsed)来做到这一点,但需要用 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

请告诉我哪里出错了。 我正在关注 this book .但作为一个初学者,请推荐我更好的方法。

最佳答案

改变这个:

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=(.*)\s{1}(.*)

用这个:

torque=(.{12})(.{12})

假定“扭矩”后的数字均使用 12 个字符的字段宽度。

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

关于python - 带有python错误的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20018637/

相关文章:

python - 如何调用父类的__repr__?

python sklearn : what is the difference between accuracy_score and learning_curve score?

regex - 如何使用正则表达式获取第三个数字短语 ip 地址(v4)

python - 如何在数据帧中的字符串中查找数字并使用千位分隔符重新格式化该数字?

python - 在 PyQt4 中为 listwidget 添加右键单击功能

python - 来自数据流的 BigQuery 流式传输无提示地失败

python - 如何将未知的局部变量获取到其他命名空间

php - 获取 Twig 模板文件中使用的所有变量

javascript - 正则表达式不包含某些词

javascript - 一种正则表达式允许正好 5 位数字,数字前后有一个可选的空格?