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 中,仅供参考)。但是,请注意,在第二个文件名中,存在第一个文件名中不存在的组。当然,可以使用字符串拆分等,但我想用一个正则表达式来做到这一点。第一个文件名的正则表达式类似于:

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

第二个将是:

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

我希望正则表达式组在存在可选组时为空,并在存在可选组时包含可选组(以便稍后我可以使用它来构造带有 \4 的新文件名)。

4

1 回答 1

7

To make a group optional, you can add ? after the desired group. Like this: (\w+)?

But your example has an underscore that should be optional as well. To deal with it, you can group it together with optional group.

((\w+)_)?

However this will add a new group to your match results. To avoid it, use a non-matching group:

(?:(\w+)_)?

The final result will look like this:

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