【问题标题】:Unable to add multiple regex patterns into array list无法将多个正则表达式模式添加到数组列表中
【发布时间】:2019-01-08 19:38:57
【问题描述】:

当找到一个模式时,我的目标是一个字符串,然后它将它们添加到单独的数组中。

例如

我的测试字符串是

String input = "this is a sentence continents=Asia end continents=Europe end continents=Africa end continents=Australia end continents=South America end continents=North America end continents=Antartica end";

结果是

[continents, Asia, continents, Europe, continents, Africa, continents, Australia, continents, South America, continents, North America]

我想要将它们添加到单独的数组中,如下所示

[continents, Asia], [continents, Europe], [continents, Africa], [continents, Australia], [continents, South America], [continents, North America], [continents, Antartica]

以下是我的代码:

list = new ArrayList<>();

Pattern pattern = Pattern.compile("continents=(.+?) end ");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) { 
    list.add("continents");
    value = matcher.group(1);
    list.add(value);
} 

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: java arrays regex arraylist regex-group


    【解决方案1】:

    你可以使用

    String input = "this is a sentence continents=Asia end continents=Europe end continents=Africa end continents=Australia end continents=South America end continents=North America end continents=Antartica end";
    Pattern pattern = Pattern.compile("(continents)=(.+?) end ");
    Matcher matcher = pattern.matcher(input);
    List<List<String>> lst = new ArrayList<>();
    while (matcher.find()){
        lst.add(Arrays.asList(matcher.group(1),matcher.group(2))); 
    } 
    System.out.println(lst); 
    // => [[continents, Asia], [continents, Europe], [continents, Africa], [continents, Australia], [continents, South America], [continents, North America]]
    

    Java demo

    正则表达式现在有两个捕获组,continents 被捕获到第 1 组,名称被捕获到第 2 组。匹配的结果与 Arrays.asList(matcher.group(1),matcher.group(2)) 一起添加到 List&lt;List&lt;String&gt;&gt;

    请注意,您也可以使用像 "(continents)=(.+?)\\s+end\\b" 这样的正则表达式来支持任何空格,并将 end 作为一个完整的单词,甚至可以在字符串末尾或任何非单词字符之前匹配。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,那么您就快到了。您只需要将每个匹配项添加到不同的列表中,然后将该列表添加到外部列表中:

          List<List<String>> list = new ArrayList<>();
      
          Pattern pattern = Pattern.compile("continents=(.+?) end ");
          Matcher matcher = pattern.matcher(input);
      
          while (matcher.find()) { 
              List<String> innerList = new ArrayList<>();
              innerList.add("continents");
              String value = matcher.group(1);
              innerList.add(value);
              list.add(innerList);
          }
      

      【讨论】:

        猜你喜欢
        • 2015-08-31
        • 1970-01-01
        • 2021-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-26
        相关资源
        最近更新 更多