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

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都不同,直到下一个/为止,我想要提取。


1
给定任意字符串,如何确定保留哪一部分?您只保留与在 .NET 中用 D 指定的 GUID 格式匹配的部分吗? - Adam Mihalcin
如果有许多具有不同前缀和模式的这样的字符串,您可能需要查看“正则表达式”。 - Ankit
最好做类似于这个的东西https://dev59.com/H3VD5IYBdhLWcg3wTJrF - dilip kumbham
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()));

虽然这确实是他的问题的答案,但我不认为他想要整个剩余的字符串。而且,如果你只是要使用长度作为第二个参数,为什么要使用substring的二参数版本?查找一参数版本。 - billjamesdev

4

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

抱歉,我以为那是你想要的。那么模式应该是:(?<=30/)[^/]* - Untitled

2
只是针对这个问题,还是您想要一种通用的方法来解决它?
String[] out = mystring.split("/")
return out[out.length - 2]

我认为斜杠“/”绝对是你正在寻找的分隔符。Alex,我看不出你所说的问题在哪里。

编辑:好的,Python的索引困扰了我。


这就是为什么我要放置大小为-1。以确切地返回32531a5d-b0b1-4a8b-9029-b48f0eb40a34。 - jlengrand
1
你在这里返回了字符串的最后一部分,实际上他需要倒数第二个:return out[out.length - 2]; - Gabriel Negut

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));
    }

我正在获取字符串的最后一部分,即最后一个“/”之后的部分,但我不需要它,我只需要倒数第二个部分。 - user1196969
我对我的答案进行了一些小修改。 - xiaofeng.li
我仍然得到了字符串的最后一部分。 - user1196969
这很奇怪。:/ 我得到了 32531a5d-b0b1-4a8b-9029-b48f0eb40a34 - xiaofeng.li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接