0

行の先頭を正規表現に一致させ、後で行を返す方法を探しています。セットは非常に広範囲であるため、 set 内で一致する Python 正規表現で指定されたメソッドを単純に使用できないのはなぜですか。また、正規表現が最善の解決策であるかどうかも疑問に思っていました。残念ながらhttp://docs.python.org/3.3/library/re.htmlを読みましたが、答えがないようです。これが私がこれまでに試したことです...

import re
import os
import itertools

f2 = open(file_path)

unilist = []

bases=['A','G','C','N','U']

patterns= set(''.join(per) for per in itertools.product(bases, repeat=5))

#stuff

if re.match(r'.*?(?:patterns)', line):
    print(line)
    unilist.append(next(f2).strip())
    print (unilist)

ほら、問題は、自分のセットを参照する方法がわからないことです...

一致させようとしているファイルは次のようになります。

@SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50 TTGCCTGCCTATCATTTTAGTGCCTGTGAGGTGGAGATGTGAGGATCAGT

+

hhhhhhhhhhghhghhhhhfhhhhhfffffeee[X]b[d[ed`[Y[^Y
4

2 に答える 2

2

あなたはそれについて間違った方法で進んでいます。

文字セットを正規表現のままにしておくだけです。

re.search('[AGCNU]{5}', line)

これらの 5 文字から構築された任意の 5 文字のパターンに一致します。これは、セット ラインで生成した同じ 3125 の異なる組み合わせに一致しますが、すべての可能な組み合わせを前もって構築する必要はありません。

それ以外の場合、正規表現の試行はpatterns変数と相関関係がなく、パターンr'.*?(?:patterns)'は 0 個以上の任意の文字に一致し、その後にリテラル text が続きます'patterns'

于 2013-07-09T14:14:30.417 に答える
0

あなたの質問から私が理解したことによると、これはあなたのニーズに合うように思えます:

import re

sss = '''dfgsdfAUGNA321354354
!=**$=)"nNNUUG54788
=AkjhhUUNGffdffAAGjhff1245GGAUjkjdUU
.....cv GAUNAANNUGGA'''

print re.findall('^(.+?[AGCNU]{5})',sss,re.MULTILINE)
于 2013-07-09T14:26:57.233 に答える