【问题标题】:How to extract a substring from a sentence until a delimeter如何从句子中提取子字符串直到分隔符
【发布时间】:2021-08-26 18:16:00
【问题描述】:

您好,我有一些这样的字符串:

location/city/home-a-berlin?/someNewAdress

我想提取位于“-a-”和“?”之间的单词 berlin。我如何在 java 中使用正则表达式来做到这一点?

我可以通过使用字符串 API 来做到这一点,但有点卡在正则表达式中。

String cityName = url.substring(url.lastIndexOf("-a-")+3, url.indexOf('?')) //berlin

【问题讨论】:

标签: java regex


【解决方案1】:

您可以使用带有否定字符类的捕获组。

-a-([^\?]+)\?

Regex demo | Java demo

在 Java 中:

String regex = "-a-([^\\?]+)\\?";
String string = "location/city/home-a-berlin?/someNewAdress\n";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
    System.out.println(matcher.group(1));
}

输出

berlin

【讨论】:

    【解决方案2】:

    或者

    s = s.replaceAll(".*-(.*?)\\?.*", "$1");
    

    【讨论】:

      【解决方案3】:

      替代正则表达式:

       "-a-(.+?)\\?"
      

      测试台和上下文中的正则表达式:

      public static void main(String[] args) {
          String input1 = "location/city/home-a-berlin?/someNewAdress";
          List<String> inputs = Arrays.asList(input1);
      
          Pattern pattern = Pattern.compile("-a-(.+?)\\?");
          List<String> results = inputs.stream().map(s -> pattern.matcher(s))
                  .filter(Matcher::find).map(m -> m.group(1)).collect(Collectors.toList());
      
          //Output:
          results.forEach(System.out::println);
      }
      

      输出:

      berlin
      

      正则表达式结构总结:

      https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html

      【讨论】:

        猜你喜欢
        • 2018-02-05
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2021-09-28
        相关资源
        最近更新 更多