1

次のようなシーケンスの場合:

NM_001003443 chr11 + 5925152 5926098 5925152 5926098 2 5925152,5925652、5925404,5926098、

次のような情報行が必要です(スプライスされていない、つまりsys.argvに「-s」があることを意味します)。

>NM_00100343|chr11(+):5925152Z5926098

または(スプライス、sys.argvに'-s'はありません):

>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 = open(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])
4

1 に答える 1

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. \s+後に行方不明(chr\d+)
  3. 正規表現の終わりに向かって\用語が欠落しています,s+(
于 2012-04-24T20:04:49.790 に答える