如何在python

时间:2018-10-08 03:08:00

标签: python regex

我有一个这样的txt文件:

ASP62-Main-N     LYS59-Main-O    100.00%
THR64-Side-OG1   VAL60-Main-O    100.00%
ALA66-Main-N     LEU61-Main-O    100.00%
LYS33-Main-N     SER30-Main-O    100.00%

我想获取“ -Main”或“ -Side”之前的数字,结果如下:

62 59
64 60
66 61
33 30

我写了一些代码,但结果只显示了数字“ -Main”。

f1 = open(filename1)
for line in f1.readlines():
    N=re.compile(r'(\d+)-Main|-Side')
    n=N.findall(line)
    print (n)

结果如下所示:

['62', '59']
['', '60']
['66', '61']
['33', '30']

请有人给我一些建议。

3 个答案:

答案 0 :(得分:2)

或将此作为完整代码:

import re
with open('filename.txt','r') as f:
   for i in f:
      print(' '.join(re.findall('\d{2}',i)[:-2]))

输出:

62 59
64 60
66 61
33 30

Example

答案 1 :(得分:2)

正如@JosephSible所提到的,由于交替的优先级较低,因此应该对交替中的模式进行分组,但是在这种情况下,您应该为-Main-Side使用非捕获组,因为实际上不希望它们出现在您的输出中:

N=re.compile(r'(\d+)(?:-Main|-Side)')

或者,您可以使用先行模式,因此不需要任何捕获组:

N=re.compile(r'\d+(?=-Main|-Side)')

答案 2 :(得分:1)

这是一个优先问题。交替发生得足够晚,以至于您的正则表达式被解析为“数字后跟-Main”或“ -Side”。请改用此正则表达式:(\d+)(-Main|-Side)