我想匹配给定输入字符串中的多个模式,因此结果将是一个包含与我的任何预定义模式匹配的所有子字符串的列表:
String input = "Episode_NN 3_CD was_XX awesome_XX";
final Pattern ruleOne = Pattern.compile("(\\w*_NN\\s|\\w*_NNS\\s)+\\w*_CD");
final Pattern ruleTwo = Pattern.compile(ruleOne.pattern().concat(""));
Matcher matcher = ruleOne.matcher(input);
List<String> ent = new ArrayList<String>();
while (matcher.find()) {
ent.add(matcher.group());
}
那么我必须添加多个匹配器吗?这意味着多次扫描文本,如下所示:
while (matcherOne.find() | matcherTwo.find() | ...) {
....
}
最佳答案
这是一种如何在一个模式中使用多个替代方案的方法(使用交替运算符|
):
\w*_NNS?\b|\w*_CD\b
示例代码
String input = "Episode_NN 3_CD was_XX awesome_XX";
final Pattern ruleOne = Pattern.compile("\\w*_NNS?\\b|\\w*_CD\\b");
Matcher matcher = ruleOne.matcher(input);
List<String> ent = new ArrayList<String>();
while (matcher.find()) {
ent.add(matcher.group());
}
String[] arr = new String[ent.size()];
arr = ent.toArray(arr);
System.out.println(Arrays.toString(arr));
输出:[Episode_NN,3_CD]
关于java - 如何在不多次扫描的情况下将文本匹配多种模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752993/