无法将多个正则表达式模式添加到数组列表中
Unable to add multiple regex patterns into array list
我的目标是在找到模式时给出一个字符串,然后将它们添加到单独的数组中。
例如
我的测试字符串是
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);
}
如有任何帮助,我们将不胜感激。谢谢!
如果我正确理解你的问题,你就快成功了。您只需将每个匹配添加到不同的列表,并将列表添加到外部列表:
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);
}
您可以使用
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]]
正则表达式现在有两个捕获组,continents
被捕获到第1组,名字被捕获到第2组。匹配结果加上Arrays.asList(matcher.group(1),matcher.group(2))
到List<List<String>>
.
请注意,您也可以使用像 "(continents)=(.+?)\s+end\b"
这样的正则表达式来支持任何空格和 end
作为整个单词,甚至可以在字符串末尾或任何非单词字符之前匹配.
我的目标是在找到模式时给出一个字符串,然后将它们添加到单独的数组中。
例如
我的测试字符串是
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);
}
如有任何帮助,我们将不胜感激。谢谢!
如果我正确理解你的问题,你就快成功了。您只需将每个匹配添加到不同的列表,并将列表添加到外部列表:
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);
}
您可以使用
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]]
正则表达式现在有两个捕获组,continents
被捕获到第1组,名字被捕获到第2组。匹配结果加上Arrays.asList(matcher.group(1),matcher.group(2))
到List<List<String>>
.
请注意,您也可以使用像 "(continents)=(.+?)\s+end\b"
这样的正则表达式来支持任何空格和 end
作为整个单词,甚至可以在字符串末尾或任何非单词字符之前匹配.