使用正则表达式提取特定模式

时间:2014-05-21 16:25:22

标签: python regex

我有类似的东西,

tr|F2EF46|F2EF46_HORVD  210753
sp|K7W3E0|K7W3E0_MAIZE  21032

我需要在单独的文件中打印只有ID的内部| |,

F2EF46
K7W3E0

此脚本查找模式,但如何仅打印ID?

import re
o=open('result.txt','w')
with open('input.txt','rb') as f:
    for line in f:
        if re.findall(r'([a-z][a-z])(\|[a-z0-9]*.*)\|', line):
            line = line.strip()
            line = line.rstrip()
            line = re.sub('(\|[a-z0-9]*.*)\|', '', line) 
            line = re.sub('\|', '', line)
            query_id = line
            f.write(query_id+'\n')
            o.write(line)

2 个答案:

答案 0 :(得分:1)

这里你不需要正则表达式:

id = line.split('|')[1])

虽然如果你真的想使用正则表达式,那么你可以这样做:

id = re.search('(\|)(.*?)(\|)', line).group(2)

不要使用id作为变量名称,它是一个内置函数,您可以覆盖它。

答案 1 :(得分:1)

如果您仍想使用正则表达式,请使用lookarounds

(?<=\|)[^|]+(?=\|)

Demo