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

これにより、ファイル名 (ディレクトリを除く) と拡張子を見つけることができます。

おそらく、URL をjava.net.URLで解析し、URL.getPath() を使用する方がよいでしょう。

于 2013-03-05T15:45:45.943 に答える
1

の代わりに(?<=/)(\w+)(?=.\w+(\?.)$)、試してください(.+?)(\.[^.]*$|$)

于 2013-03-05T15:33:29.863 に答える