我有一个包含文件 URL 的字符串。从该字符串中,我想只获取不带扩展名的文件名。
例如:
http://path/Lists/Test/Attachments/1/Document Test.docx
从那个例子我想回来:Document Test
我已经有以下模式:
(?<=\/)(\w+)(?=\.\w+(\?.*)*$)
但是如果文件名包含空格,它就不起作用......我怎样才能改变这个模式,它更灵活?
我有一个包含文件 URL 的字符串。从该字符串中,我想只获取不带扩展名的文件名。
例如:
http://path/Lists/Test/Attachments/1/Document Test.docx
从那个例子我想回来:Document Test
我已经有以下模式:
(?<=\/)(\w+)(?=\.\w+(\?.*)*$)
但是如果文件名包含空格,它就不起作用......我怎样才能改变这个模式,它更灵活?
要仅捕获扩展名之前的字符(不限制文件名可能包含的字符),请使用以下命令:
/[^/]*(?=\.[^.]+($|\?))/
不必要时不要使用正则表达式。在这种情况下,和之间lastIndexOF
/
的子字符串.
会给你你想要的。
String data = "Document Testdocx";
int start = data.lastIndexOf('/')+1;
int end = data.lastIndexOf('.');
if (end == -1) end = data.length();
System.out.println(data.substring(start , end));
但是如果你真的必须使用正则表达式,你可以试试这个模式:(?<=/|^)[^./]+(?=\\.\\w+$|$)
尝试
String s = "http://path/Lists/Test/Attachments/1/Document Test.docx";
s = s.replaceAll(".+/(.+)\\..+", "$1");
System.out.println(s);
输出
Document Test
([^?]+)\/([^/?]+)(\.[^.\?]+)(\?.*|)$
即使 URL 看起来像
http://example.com/foo/bar/baz blah.html?params=true
这可以找到文件名(没有目录)和扩展名。
可能更好的是使用java.net.URL解析 URL ,并使用 URL.getPath()。
而不是(?<=/)(\w+)(?=.\w+(\?.)$)
,尝试(.+?)(\.[^.]*$|$)