在某个模式之后提取子字符串

时间:2012-06-06 04:49:26

标签: java string split

我有以下字符串:

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 个答案:

答案 0 :(得分: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()));

答案 1 :(得分:4)

在这种情况下,split类的String函数将无法帮助您,因为它会丢弃分隔符,而这不是我们想要的。你需要制作一个看起来落后的模式。 synatax背后的外观是:

(?<=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());

答案 2 :(得分:2)

只是为了这个,或者你想要一个通用的方法来做它?

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

我认为/肯定是您要搜索的分隔符。 我看不出你在谈论Alex的问题

编辑:好的,Python让我得到索引。

答案 3 :(得分: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));
    }