5

我有以下字符串:

http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true

之后如何提取部分30/?在这种情况下,它是32531a5d-b0b1-4a8b-9029-b48f0eb40a34。我有另一个字符串具有相同的部分,最多可达 30/,之后每个字符串都有不同的 id 到下一个 / 我想要的。

4

4 回答 4

6

你可以这样做:

String s = "http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true";
        System.out.println(s.substring(s.indexOf("30/")+3, s.length()));
于 2012-06-06T04:56:16.027 回答
4

split在这种情况下,类的函数对String您没有帮助,因为它丢弃了分隔符,这不是我们想要的。你需要制作一个向后看的图案。语法背后的外观是:

(?<=X)Y

它标识任何Y前面带有X.

因此,在您的情况下,您需要这种模式:

(?<=30/).*

编译模式,将其与您的输入匹配,找到匹配项并捕获它:

String input = "http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true";
Matcher matcher = Pattern.compile("(?<=30/).*").matcher(input);
matcher.find();
System.out.println(matcher.group());
于 2012-06-06T04:59:40.367 回答
2

只是为了这个,还是你想要一种通用的方式来做到这一点?

String[] out = mystring.split("/")
return out[out.length - 2]

我认为 / 绝对是您要搜索的分隔符。我看不出你在说亚历克斯的问题

编辑:好的,Python 为我提供了索引。

于 2012-06-06T04:51:42.743 回答
1

正则表达式是我认为的答案。但是,表达式的编写方式取决于您要处理的数据 (url) 格式。像这个:

    Pattern pat = Pattern.compile("/Content/SiteFiles/30/([a-z0-9\\-]+)/.*");
    Matcher m = pat.matcher("http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true");
    if (m.find()) {
        System.out.println(m.group(1));
    }
于 2012-06-06T04:57:52.240 回答