我有以下字符串:
http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true
之后如何提取部分30/
?在这种情况下,它是32531a5d-b0b1-4a8b-9029-b48f0eb40a34
。我有另一个字符串具有相同的部分,最多可达 30/,之后每个字符串都有不同的 id 到下一个 / 我想要的。
你可以这样做:
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()));
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());
只是为了这个,还是你想要一种通用的方式来做到这一点?
String[] out = mystring.split("/")
return out[out.length - 2]
我认为 / 绝对是您要搜索的分隔符。我看不出你在说亚历克斯的问题
编辑:好的,Python 为我提供了索引。
正则表达式是我认为的答案。但是,表达式的编写方式取决于您要处理的数据 (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));
}