Избегание печатного пространства в регулярных выражениях

У меня есть выход 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 ответа

Решение

На самом деле вы можете использовать возвращенное совпадение, чтобы извлечь желаемое значение:

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 вообще.

Если вы просто ищете строки типа tag=value, вам нужно регулярное выражение?

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

Запятая в операторе печати добавляет пробел между параметрами. + Изменить

print output,query

в

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

a='Query= conguie'

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

#output conguie
Другие вопросы по тегам