我有一个字符串,表示包含合并的业务部门代码和时间戳的文件名,例如: alfin_cf_cashflowcomposition_X0826_20180726122003.csv
我想排除BU代码和时间戳,并以剥离的名称结尾,所以我要获得此名称: alfin_cf_cashflowcomposition.csv
到目前为止,我已经设法只匹配小写字母,点和下划线(因此,不包括大写X和代表时间戳的数字)。
我使用了一个简单的表达式: / [a-z ._] ,并得到了以下结果: alfin_cf_cashflowcomposition __。csv
请注意,“。csv”之前有2个下划线。我不想在那里。
如果下一个字符是小写字母,我只想使用下划线。
如果下一个字符是大写字母或数字,我需要编写一个忽略下划线的正则表达式。
关于如何实现这一目标的任何想法吗?
答案 0 :(得分:0)
我不会为此使用正则表达式。您可以去除扩展名,分割文件名的其余部分,并使用除最后两个部分以外的所有部分。
我用javascript实现了这个简单的代码。
const orig_filename = "alfin_cf_cashflowcomposition_X0826_20180726122003.csv";
function strip_codes (orig){
const extpos = orig.lastIndexOf('.');
const nameparts = orig.substr(0,extpos).split('_');
const ext = orig.substr(extpos);
const name = nameparts
.slice(0, nameparts.length - 2)
.join('_');
return name + ext;
}
console.log(strip_codes(orig_filename));
答案 1 :(得分:0)
您可以使用_.[A-Z,0-9].*(?=.csv)
这个正则表达式起作用。
您可以在这里在线进行测试https://regexr.com/