0

私は正規表現が初めてで、一度にエントリを読み取って「Chr」番号だけを抽出する必要があります。

たとえば、次のデータの場合:

Chr6_clust92082
Chr7_clust13
Chr7_clust256
Chr7_clust3678
Chr7_clust42
Chr7_clust5
Chr7_clust130538

最初のエントリは、「Chr」の直後で「_」の前にあるため、「6」を返す必要があります。そのための特定の正規表現を提案してください。

4

4 に答える 4

2

何度も一致する場合は、パターンをコンパイルするのが最善です。

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 秒かかりました。

于 2012-05-12T20:00:34.620 に答える
0

次の正規表現を記述できます。

re.match('Chr(\d+)_.*','Chr6_clust92082')
于 2012-05-12T19:48:42.187 に答える
0

これは、stackoverflow で歓迎されるタイプの質問ではありません。誰もあなたの仕事をしません。必要な正規表現は非常に簡単に見つけることができます。

このオンライン ツールをお勧めします: http://www.gskinner.com/RegExr/

正規表現を見つけるのに大いに役立ちます

于 2012-05-12T19:48:52.293 に答える
0

次を使用すると、複数の数字がある場合でも表示されます-

re.findall(r'^Chr([\d]+)_', 'Chr6_clust92082')[0]
于 2012-05-12T19:56:27.910 に答える