2

我有一个包含文件 URL 的字符串。从该字符串中,我想只获取不带扩展名的文件名。

例如:

http://path/Lists/Test/Attachments/1/Document Test.docx

从那个例子我想回来:Document Test

我已经有以下模式:

(?<=\/)(\w+)(?=\.\w+(\?.*)*$)

但是如果文件名包含空格,它就不起作用......我怎样才能改变这个模式,它更灵活?

4

5 回答 5

5

要仅捕获扩展名之前的字符(不限制文件名可能包含的字符),请使用以下命令:

/[^/]*(?=\.[^.]+($|\?))/
于 2013-03-05T17:06:50.840 回答
4

不必要时不要使用正则表达式。在这种情况下,和之间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+$|$)

于 2013-03-05T15:35:01.993 回答
2

尝试

    String s = "http://path/Lists/Test/Attachments/1/Document Test.docx";
    s = s.replaceAll(".+/(.+)\\..+", "$1");
    System.out.println(s);

输出

Document Test
于 2013-03-05T15:41:40.697 回答
2
([^?]+)\/([^/?]+)(\.[^.\?]+)(\?.*|)$

即使 URL 看起来像

http://example.com/foo/bar/baz blah.html?params=true

这可以找到文件名(没有目录)和扩展名。

可能更好的是使用java.net.URL解析 URL ,并使用 URL.getPath()。

于 2013-03-05T15:45:45.943 回答
1

而不是(?<=/)(\w+)(?=.\w+(\?.)$),尝试(.+?)(\.[^.]*$|$)

于 2013-03-05T15:33:29.863 回答