Избегание печатного пространства в регулярных выражениях
У меня есть выход 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