0

次の形式のファイルに一連の文字列があります。

>HEADER_Text1
Information here, yada yada yada
Some more information here, yada yada yada
Even some more information here, yada yada yada
>HEADER_Text2
Information here, yada yada yada
Some more information here, yada yada yada
Even some more information here, yada yada yada
>HEADER_Text3
Information here, yada yada yada
Some more information here, yada yada yada
Even some more information here, yada yada yada

>次の文字の間の文字の下にある改行文字を削除する正規表現パターンを見つけようとしています>。したがって、最終結果は次のようになります。

>HEADER_Text1
Information here, yada yada yada Some more information here, yada yada yada Even some more information here, yada yada yada
>HEADER_Text2
Information here, yada yada yada Some more information here, yada yada yada Even some more information here, yada yada yada
>HEADER_Text3
Information here, yada yada yada Some more information here, yada yada yada Even some more information here, yada yada yada

これを行うための正規表現パターンを考え出す方法を誰かが知っていますか?

補足:この形式は、計算科学ではFASTA形式として一般的です。

ありがとう!

4

5 に答える 5

1

コメントで述べたように、最善の策は既存の FASTA パーサーを使用することです。なぜだめですか?

先頭の大なりに基づいて行を結合する方法は次のとおりです。

def joinup(f):
    buf = []
    for line in f:
        if line.startswith('>'):
            if buf:
                yield " ".join(buf)
            yield line.rstrip()
            buf = []
        else:
            buf.append(line.rstrip())
    yield " ".join(buf)

for joined_line in joinup(open("...")):
    # blah blah...
于 2013-02-10T20:04:25.357 に答える
0

> は常に新しい行の最初の文字であると想定されるため、

"\n([^>])" with "\1"

于 2013-02-10T18:27:42.987 に答える
0

正規表現を使用する必要はありません:

[ x.startswith('>') and x or x.replace('\n','') for x in f.readlines()]    

動作するはずです。

In [43]: f=open('test.txt')

In [44]: contents=[ x.startswith('>') and x or x.replace('\n','') for x in f.readlines()]                                                                                   

In [45]: contents
Out[45]: 
['>HEADER_Text1\n',
 'Information here, yada yada yada',
 'Some more information here, yada yada yada',
 'Even some more information here, yada yada yada',
 '>HEADER_Text2\n',
 'Information here, yada yada yada',
 'Some more information here, yada yada yada',
 'Even some more information here, yada yada yada',
 '>HEADER_Text3\n',
 'Information here, yada yada yada',
 'Some more information here, yada yada yada',
 'Even some more information here, yada yada yada']
于 2013-02-10T18:54:49.983 に答える
0

これも機能するはずです。

sampleText=""">HEADER_Text1 情報はこちら、ヤダヤダヤダ 詳細はこちら、ヤダヤダヤダ さらに詳細はこちら、ヤダヤダヤダ

HEADER_Text2 情報はこちら、ヤダ ヤダ ヤダ 詳細はこちら、ヤダ ヤダ ヤダ さらに詳細はこちら、ヤダ ヤダ ヤダ HEADER_Text3 情報はこちら ヤダ ヤダ ヤダ さらに詳細はこちら ヤダ ヤダ ヤダ""

cleartext = re.sub ("\n(?!>)", "", sampleText)

平文を印刷する

HEADER_Text1情報はこちら、ヤダヤダヤダその他の情報はこちら、ヤダヤダヤダEven some more information here、yada yada yadaHEADER_Text2情報はこちら、ヤダヤダヤダその他の情報はこちら、ヤダヤダヤダここで、ヤダヤダヤダさらにいくつかの情報をここに、ヤダヤダヤダ

于 2013-02-10T19:29:06.567 に答える
0

あなたは本当に正規表現を望んでいません。そして、この仕事には python と biopython は不要です。それが実際に FASTQ 形式の場合は、次を使用しますsed

sed '/^>/ { N; N; N; s/\n/ /2g }' file

結果:

>HEADER_Text1
Information here, yada yada yada Some more information here, yada yada yada Even some more information here, yada yada yada
>HEADER_Text2
Information here, yada yada yada Some more information here, yada yada yada Even some more information here, yada yada yada
>HEADER_Text3
Information here, yada yada yada Some more information here, yada yada yada Even some more information here, yada yada yada
于 2013-02-10T23:29:34.133 に答える