2012-04-24 168 views
1

對於這樣一個序列:匹配的正則表達式(蟒蛇)

NM_001003443 CHR11 + 5925152 5926098 5925152 5926098 2 5925152,5925652,5925404,5926098,

我想,看起來像下面的信息線(未剪切,這意味着存在一個參數是sys.argv '-S'):

>NM_00100343|chr11(+):5925152Z5926098

或(剪接,沒有 '-S' 在sys.argv中):

>NM_00100343|chr11(+):5925152Z5926098|5925151Z5925404,5925652Z5926098

我試圖做到這一點,但不斷收到不正確的匹配,有人看我的正則表達式,看看它看起來和/或正確匹配?

我已經寫:

p值=「(NM_ \ d +)\ S +(CHR \ d +)\ S +([+ | - ])\ S +(\ d +)\ S +(\ d +)\ S + (\ d +)\ s +(\ d +)\ s +(\ d +)\ s +(\ d +),(\ d +),\ s +(\ d +),(\ d +),'

並試圖匹配他們通過(該文件中的每一行看起來像上面給出的,由FP打開=打開(INFILE行例子,「R」):

for line in fp: 
    r = search(p, line) 
    if '-s' in sys.argv and r: 
     wp.write('>'+r.group(1)+'|'+r.group(2)+'('+r.group(3)+')'+':'+r.group(4)+'-'+r.group(5)) 
    else: 
     wp.write('>'+r.group(1)+'|'+r.group(2)+'('+r.group(3)+')'+':'+r.group(4)+'-'+r.group(5)+'|'+r.group(6)+'-'+r.group(11)+','+r.group(9)+'-'+r.group(12)) 

編輯,這是否顯示正確

for line in fp: 
    line = line.replace(',',' ') 
    tokens = line.split() 
    if '-s' in sys.argv and r: 
     wp.write('>'+tokens[0]+'|'+tokens[1]+'('+tokens[2]+')'+':'+tokens[3]+'-'+tokens[4]) 
    else: 
     wp.write('>'+tokens[0]+'|'+tokens[1]+'('+tokens[2]+')'+':'+tokens[3]+'-'+tokens[4]+'|'+tokens[5]+'-'+tokens[10]+','+tokens[8]+'-'+tokens[11]) 

回答

2

您需要的所有數據都用空格或逗號分隔,所以根本不需要正則表達式。

mystring = mystring.replace(',', ' ') # convert all commas to spaces 
tokens = mystring.split() # split at spaces 

如果要堅持一個正則表達式,有一些錯別字。這是正確的REGEXT: p = '(NM_\d+)\s+(chr\d+)\s+([+|-])\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+),(\d+),\s+(\d+),(\d+),'

  1. [+-]沒有括號和|
  2. 失蹤(chr\d+)
  3. 缺少術語,s+(\對正則表達式
+0

結束時,如果我在空間分割後\s+,我怎麼使它看起來像期望的格式? – 2012-04-24 20:07:20

+0

與正則表達式一樣,只需將r.group(1)替換爲標記[0]等。 – 2012-04-24 20:08:25

+0

@CodeChordsman - 它應該是[[+ - ]'而不是'[+ | - ]',因爲它是一個字符類 – 2012-04-24 20:09:02