私は正規表現が初めてで、一度にエントリを読み取って「Chr」番号だけを抽出する必要があります。
たとえば、次のデータの場合:
Chr6_clust92082
Chr7_clust13
Chr7_clust256
Chr7_clust3678
Chr7_clust42
Chr7_clust5
Chr7_clust130538
最初のエントリは、「Chr」の直後で「_」の前にあるため、「6」を返す必要があります。そのための特定の正規表現を提案してください。
何度も一致する場合は、パターンをコンパイルするのが最善です。
c = re.compile('Chr(\d)_')
9 より大きい chr-number を使用できる場合は、次のようにする必要があります。
c = re.compile('Chr(\d*)_')
次に、次のようにします。
t = 'Chr6_clust92082'
n = int(re.match(c, t).groups()[0])
もちろん、反復ごとに t を変更するだけです。
あなたは正規表現を求めましたが、パターンは非常に単純なので、使用する価値があるかもしれません:
n = int(t.split("_",1)[0][3:])
パターンの 1110000 文字列 (理由は聞かないでください) の時間を計測したところ、8.8 秒かかりましたが、正規表現バージョンは 21.4 秒かかりました。
次の正規表現を記述できます。
re.match('Chr(\d+)_.*','Chr6_clust92082')
これは、stackoverflow で歓迎されるタイプの質問ではありません。誰もあなたの仕事をしません。必要な正規表現は非常に簡単に見つけることができます。
このオンライン ツールをお勧めします: http://www.gskinner.com/RegExr/
正規表現を見つけるのに大いに役立ちます
次を使用すると、複数の数字がある場合でも表示されます-
re.findall(r'^Chr([\d]+)_', 'Chr6_clust92082')[0]