如何编写正则表达式来查找以下文件的文件扩展名,请记住我要查找的是字符串的“.pdf”或“.xls”部分?
修改 我想要得到的结果文件名如下:
我在Windows平台上。我在http://regexpal.com/玩了一下这个,但到目前为止,我只能弄清楚如何匹配日期:
([0-9]{4}[0-9]{2}[0-9]{2})
答案 0 :(得分:1)
.+\.(\w+)\.\w+$
会将最后一个扩展名作为第1组传递,然后如何访问它将依赖于正则表达式的宿主语言。
答案 1 :(得分:1)
使用sed:
sed 's/^\(.*[^.]*\)\.[^.]*$/\1/' <<< "REPORTPDF.20130810.pdf.pgp"
REPORTPDF.20130810.pdf
使用grep -P
(PCRE正则表达式):
grep -oP '^.+[^.]+(?=\.[^.]+$)' <<< "REPORTPDF.20130810.pdf.pgp"
REPORTPDF.20130810.pdf
答案 2 :(得分:1)
我认为这对你有用:)
^(([A-Z a-z]*)(?:XLS.|PDF.)(\d{8})(.pdf|.xls))
^从字符串的开头
开始(。*)
之前的任何字符\ d任意数字0-9
{8}该字符部分只有8次(在这种情况下是8次 数字0-9)
?:是非捕获组
我将捕获组包装成一个大的,所以你想要的东西将在第一个捕获组中:)。
这可以被替换
([A-Z a-z]*)
带
(REPORT)
答案 3 :(得分:1)
如果您不需要将文件扩展名大写,则应该可以使用
([a-zA-Z]+)\.([0-9]{4}[0-9]{2}[0-9]{2})\.(xls|pdf)\.pgp
匹配
REPORTXLS.20130810.xls.pgp
然后你使用的组是两个和三个
REPORT\2.\3
匹配
REPORT20130810.xls
问题是您没有为如何更改这些文件名提供太多上下文。
答案 4 :(得分:1)
你没有说你正在使用什么语言/库,但这个Perl单线程可以解决问题:
perl -lpe "s/^([^.]*)(...)\.(\d+)(\.\2)\.pgp/\1\3\4/i; $_=uc"
答案 5 :(得分:1)
此(.*?(?:\..*)?)(\..*)
将包含以下内容:
答案 6 :(得分:0)
如果格式非常复杂,您可以使用
(REPORT)([^.]++)[.]([^.]++)[.]([^.]++)[.](pgp)
和樱桃挑选替换根据你想要的
此处使用java但正则表达式匹配仍然相同
String a = "REPORTPDF.20130810.pdf.pgp".replaceAll(
"(REPORT)([^.]++)[.]([^.]++)[.]([^.]++)[.](pgp)",
"$1--$2--$3--$4--$5");
;
String b = "REPORTXLS.20130810.xls.pgp".replaceAll(
"(REPORT)([^.]++)[.]([^.]++)[.]([^.]++)[.](pgp)",
"$1--$2--$3--$4--$5");
System.out.println(a);
System.out.println(b);
REPORT--PDF--20130810--pdf--pgp
REPORT--XLS--20130810--xls--pgp
在您的情况下"$1$3.$2"
String b = "REPORTXLS.20130810.xls.pgp".replaceAll(
"(REPORT)([^.]++)[.]([^.]++)[.]([^.]++)[.](pgp)",
"$1$3.$2");
产生预期结果的
REPORT20130810.XLS