Java 正则表达式跳过匹配

标签 java regex

我有一些文字;我想提取没有用标点符号分隔的单词对。这是代码:

//n-grams
Pattern p = Pattern.compile("[a-z]+");
if (n == 2) {
    p = Pattern.compile("[a-z]+ [a-z]+");
}
if (n == 3) {
    p = Pattern.compile("[a-z]+ [a-z]+ [a-z]+");
}
Matcher m = p.matcher(text.toLowerCase());
ArrayList<String> result = new ArrayList<String>();

while (m.find()) {
    String temporary = m.group();
    System.out.println(temporary);

    result.add(temporary);
}

问题是它会跳过一些匹配项。例如

"My name is James"

,对于 n = 3,必须匹配

"my name is" and "name is james"

,但它只匹配第一个。有办法解决这个问题吗?

最佳答案

您可以使用 lookahead 中的组来捕获它

(?=(\b[a-z]+\b \b[a-z]+\b \b[a-z]+\b))

这导致它分成两组..所以在你的情况下它会是

Group1->我的名字是

Group2->名字是 james

关于Java 正则表达式跳过匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13330401/

相关文章:

c++ - 正则表达式算法 - 组合或

javascript - 使用正则表达式替换字符串末尾的换行符

regex - 在 Perl 正则表达式中匹配捕获组的反向翻译

java - Spring 与 EJB。 Spring可以替代EJB吗?

java - 无法退出(嵌套)while 循环 - Java

java - 合并而不是持久化可以防止 "detached entity passed to persist"错误?

java - SLF4J - 它如何知道要使用哪种日志类型

python - 使用正则表达式查找大写字母不在句子开头的单词

python - 缓存磁盘操作

JavaFX 在线程任务完成后显示对话