有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在特定模式后提取子字符串

我有以下字符串:

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

  1. # 1 楼答案

    在这种情况下,String类的split函数对您没有帮助,因为它会丢弃分隔符,而这不是我们想要的。你需要做一个向后看的图案。synatax的背后是:

    (?<=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());
    
  2. # 2 楼答案

    就为了这个,还是你想要一个通用的方法

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

    我认为/绝对是您要搜索的分隔符。 我看不出你说的亚历克斯有什么问题

    编辑:好的,Python给了我索引

  3. # 3 楼答案

    我认为正则表达式就是答案。但是,表达式的编写方式取决于要处理的数据(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));
        }
    
  4. # 4 楼答案

    你可以这样做:

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