我可以翻译以下字符串:
http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true
如何提取30/
后面的部分?在这种情况下,它是32531a5d-b0b1-4a8b-9029-b48f0eb40a34
。我有另外一些字符串,它们的相同部分都是30/
,之后每个字符串的id都不同,直到下一个/为止,我想要提取。
我可以翻译以下字符串:
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()));
String
类的split
函数在这种情况下无法帮助您,因为它会丢弃分隔符,而这不是我们想要的。您需要创建一个向后查找的模式。向后查找的语法如下:
(?<=X)Y
这个正则表达式可以匹配在任何一个 X
前面跟着一个 Y
的情况。
所以,在你的情况下,你需要使用这个模式:
(?<=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]
我认为斜杠“/”绝对是你正在寻找的分隔符。Alex,我看不出你所说的问题在哪里。
编辑:好的,Python的索引困扰了我。
return out[out.length - 2];
- Gabriel Negut我认为正则表达式是答案。然而,表达式的编写方式取决于您要处理的数据(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));
}
32531a5d-b0b1-4a8b-9029-b48f0eb40a34
。 - xiaofeng.li