修改java正则表达式

时间:2015-11-20 11:17:27

标签: java regex

我使用下面的正则表达式替换文件名

Regex -> .*\/([A-Z0-9_]{1,9})_(O).*.cmd
Substitution -> $1

文件名如下:

File Name                         | Substituted Name
---------------------------------- ------------------
/V3/OGM_REC_Offline_Level0_4D.cmd  OGM_REC
/V2/PIE_PROD_Online_Level1_6D.cmd  PIE_PROD
/V3/BR2_OnDemand.cmd               BR2
/opt/STING_Online_Inc0_1W.cmd      STING

然后文件发生了变化,我修改了正则表达式

Regex -> .*\/([A-Z0-9_]{1,9})(_O|Full).*.cmd
Substitution -> $1

其他新文件名

File Name             | Substituted Name
---------------------- ------------------
/opt/RSU10Full.cmd     RSU10
/V4/REZ40_1Full.cmd    REZ40_1

现在,似乎有新文件正在使用以下名称格式进行更新

/app/OMGIT_FullOnDemand_4W.cmd
/admin/FOC_STG_Full_6D.cmd

我再次修改了正则表达式,但它没有成功

Regex -> .*\/([A-Z0-9_]{1,9})(_O|Full|_Full).*.cmd
Substitution -> $1

2 个答案:

答案 0 :(得分:1)

我建议使用带有 lazy 限制量词{1,9}?和可选_的版本:

.*/([A-Z0-9_]{1,9}?)(_O|_?Full).*[.]cmd

这样,我们将尽可能少的字符与[A-Z0-9_]{1,9}?匹配,以返回有效的捕获子文本,_?Full部分可以保留可选的下划线。

请参阅the regex demo

答案 1 :(得分:0)

我注意到不必要的尾巴总是以:(可选)_,大写字母,小写字母。 因此,通用的解决方案是:

.*\/([^a-z]*?)[_]?[A-Z][a-z].*