2

私は次のようなファイル名のセットを持っています:

PATJVI_RNA_Tumor_8_3_63BJTAAXX.310_BUSTARD-2012-02-19.fq.gz
PATMIF_RNA_Tumor_CGTGAT_2_1_BC0NKBACXX.334_BUSTARD-2012-05-07.fq.gz

「_」文字の間の各グループをキャプチャできる単一の正規表現(python、fyi)が必要です。ただし、2番目のファイル名には、最初のファイル名には存在しないグループが存在することに注意してください。もちろん、文字列分割などを使用することもできますが、単一の正規表現でこれを実行したいと思います。最初のファイル名の正規表現は次のようになります。

(\w+)_(\w+)_(\w+)_(\d)_(\d)_(\w+)\.(\d+)_(\S+)\.fq\.gz

そして2番目は次のようになります:

(\w+)_(\w+)_(\w+)_(\w+)_(\d)_(\d)_(\w+)\.(\d+)_(\S+)\.fq\.gz

オプションのグループが存在する場合は正規表現グループを空にし、存在する場合はオプションのグループを含めたい(後で\ 4で新しいファイル名を作成するときに使用できるようにするため)。

4

1 に答える 1

7

?グループをオプションにするには、目的のグループの後に追加できます。このように:(\ w +)?

ただし、例にはオプションである必要があるアンダースコアがあります。これに対処するために、オプションのグループと一緒にグループ化することができます。

((\w+)_)?

ただし、これにより、試合結果に新しいグループが追加されます。これを回避するには、一致しないグループを使用します。

(?:(\w+)_)?

最終結果は次のようになります。

(\w+)_(\w+)_(\w+)_(?:(\w+)_)?(\d)_(\d)_(\w+)\.(\d+)_(\S+)\.fq\.gz
于 2012-08-16T13:55:37.237 に答える