2014-05-09 81 views
-1

我有默認格式的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 
+0

你可以_substitute_的空間? – devnull

+0

因爲這是我的csv格式化輸出中的第一行,所以我寧願沒有空格。 – user3224522

+1

https://docs.python.org/3.4/library/stdtypes.html#str.lstrip –

回答

2

其實你可以使用返回匹配提取價值,你想:

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

在這種情況下,你不需要再模塊在所有。

0
a='Query= conguie' 

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

#output conguie 
0

逗號在打印語句的參數之間增加空間。更改

print output,query

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

2

如果你只是在尋找像標籤=值線,你需要的正則表達式?

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

是的,我需要正則表達式,因爲這只是我的一部分代碼,我正在尋找幾個特定的​​模式 – user3224522

+0

公平的,在這種情況下,什麼離子Scerbatiuc說。 – Pete

+0

無論如何謝謝你,很高興知道未來 – user3224522