正则表达式,用于捕获有时只存在的组

2024-10-02 12:31:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组文件名,如:

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中,仅供参考),可以捕获“216;”字符之间的每个组。但是,请注意,在第二个文件名中,存在一个组,而第一个文件名中不存在该组。当然,可以使用字符串拆分等,但我希望使用单个正则表达式。第一个文件名的regex类似于:

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

第二个是:

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

当可选组存在时,我希望regex组为空;当可选组存在时,我希望regex组包含可选组(这样我可以在以后用它来构造带有\4的新文件名)。你知道吗


Tags: 字符串文件名字符regexrnagzfqtumor
1条回答
网友
1楼 · 发布于 2024-10-02 12:31:43

要使组成为可选的,可以在所需组之后添加?。这样地: (\w+)?你知道吗

但您的示例中有一个下划线,它也应该是可选的。要处理它,可以将它与可选组组合在一起。你知道吗

((\w+)_)?

不过,这将为您的匹配结果添加一个新组。要避免这种情况,请使用不匹配的组:

(?:(\w+)_)?

最终结果如下:

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

相关问题 更多 >

    热门问题