我有一组文件名,如:
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)可以捕获“_”字符之间的每个组。但请注意,在第二个文件名中,存在一个不存在于第一个文件名中的组。当然,可以使用字符串拆分等,但我想用一个正则表达式来做这个。第一个文件名的正则表达式如下:
(\w+)_(\w+)_(\w+)_(\d)_(\d)_(\w+)\.(\d+)_(\S+)\.fq\.gz
第二个将是:
(\w+)_(\w+)_(\w+)_(\w+)_(\d)_(\d)_(\w+)\.(\d+)_(\S+)\.fq\.gz
当可选组存在时,我希望正则表达式组为空,并且当它存在时包含可选组(以便稍后我可以使用它来构造带有\ 4的新文件名)。
答案 0 :(得分:7)
要使组可选,您可以在所需的组之后添加?
。像这样:
(\ W +)?
但是你的例子有一个下划线,也应该是可选的。要处理它,您可以将它与可选组一起分组。
((\w+)_)?
但是,这会为您的匹配结果添加一个新组。要避免它,请使用不匹配的组:
(?:(\w+)_)?
最终结果如下:
(\w+)_(\w+)_(\w+)_(?:(\w+)_)?(\d)_(\d)_(\w+)\.(\d+)_(\S+)\.fq\.gz