我有以下字符串:
http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true
如何在30/
之后提取零件?在这种情况下,它是32531a5d-b0b1-4a8b-9029-b48f0eb40a34
。我有另一个字符串具有相同的部分,最多30个/之后,每个字符串具有不同的id到下一个/我想要的。
答案 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));
}