在正则表达式中避免打印空间

时间:2014-05-09 11:07:56

标签: python regex bioinformatics

我有默认格式的BLAST输出。我想使用正则表达式解析和提取我需要的信息。但是,在下面的行

Query= contig1

之间有一个空间' ='和' contig1'。所以在我的输出中它会在前面打印一个空格。怎么避免这个?下面是我的一段代码,

import re
output = open('out.txt','w')
with open('in','r') as f:
    for line in f:
        if re.search('Query=\s', line) != None:
            line = line.strip()
            line = line.rstrip()
            line = line.strip('Query=\s')
            line = line.rstrip('\s/')
            query = line
            print >> output,query
output.close()

输出应该如下所示,

contig1

4 个答案:

答案 0 :(得分:2)

如果你只是在寻找像tag = value这样的行,你需要正则表达式吗?

tag,value=line.split('=')
if tag == 'Query':
   print value.strip()

答案 1 :(得分:2)

您实际上可以使用返回的匹配来提取所需的值:

for line in f:
    match = re.search('Query=\s?(.*)', line)
    if match is not None:
        query = match.groups()[0]
        print >> output,query

我们在这里做的是:我们通过空格字符搜索Query =跟随(或不跟踪)并提取任何其他字符(使用match.groups()[0],因为我们在正则表达式中只有一个组)。

另外,根据数据的性质,您可能只想进行简单的字符串前缀匹配,如下例所示:

output = open('out.txt','w')
with open('in.txt','r') as f:
    for line in f:
        if line.startswith('Query='):
            query = line.replace('Query=', '').strip()
            print >> output,query
output.close()

在这种情况下,您根本不需要re模块。

答案 2 :(得分:0)

a='Query= conguie'

print "".join(a.split('Query='))

#output conguie

答案 3 :(得分:0)

print语句中的逗号会在参数之间添加空格。改变

print output,query

print "%s%s"%(output,query)