在Java中使用正则表达式多次匹配一个字符串

福列莱克

我在使以下正则表达式工作时遇到一些问题。我想要以下字符串:

"Please enter your name here"

产生具有以下元素的数组:

'please enter', 'enter your', 'your name', 'name here'

当前,我正在使用以下模式,然后创建匹配器并通过以下方式进行迭代:

Pattern word = Pattern.compile("[\w]+ [\w]+");
Matcher m = word.matcher("Please enter your name here");

while (m.find()) {
    wordList.add(m.group());
}

但是我得到的结果是:

'please enter', 'your name'

我究竟做错了什么?(请注意,我在regexpal.com上检查了相同的正则表达式,并遇到了相同的问题)。似乎同一单词不会被匹配两次。我该怎么做才能达到我想要的结果?

谢谢。

---------------------------------

编辑:感谢所有的建议!我最终做了这个(因为它增加了能够轻松指定“ n-gram”数量的灵活性):

Integer nGrams = 2;
String patternTpl = "\\b[\\w']+\\b";
String concatString = "what is your age? please enter your name."
for (int i = 0; i < nGrams; i++) {
    // Create pattern.
    String pattern = patternTpl;
    for (int j = 0; j < i; j++) {
        pattern = pattern + " " + patternTpl;
    }
    pattern = "(?=(" + pattern + "))";
    Pattern word = Pattern.compile(pattern);
    Matcher m = word.matcher(concatString);

    // Iterate over all words and populate wordList
    while (m.find()) {
        wordList.add(m.group(1));
    }
}

结果是:

Pattern: 
(?=(\b[\w']+\b)) // In the first iteration
(?=(\b[\w']+\b \b[\w']+\b)) // In the second iteration

Array:
[what, is, your, age, please, enter, your, name, what is, is your, your age, please enter, enter your, your name]

注意:从以下最佳答案中获取了模式:Java正则表达式跳过匹配项

Arshajii

比赛不能重叠,这说明了您的结果。这里有一个潜在的解决方法,利用捕获组具有积极的前瞻

Pattern word = Pattern.compile("(\\w+)(?=(\\s\\w+))");
Matcher m = word.matcher("Please enter your name here");

while (m.find()) {
    System.out.println(m.group(1) + m.group(2));
}
请输入
输入您的
你的名字
在这里命名

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在两个字符串(包括第一个字符串)之间匹配的正则表达式

来自分类Dev

Java正则表达式:如果右括号是字符串中的最后一个字符,则匹配圆括号中的任何数字

来自分类Dev

正则表达式匹配不包括第一个字符的字符串

来自分类Dev

使用NSPredicate或正则表达式检查一个大字符串是否包含另一个字符串

来自分类Dev

正则表达式多个元素一个字符串

来自分类Dev

正则表达式以匹配2个字符串并包含另一个字符串

来自分类Dev

Powershell正则表达式匹配第一个字符串以外的字符串

来自分类Dev

正则表达式从一个字符串到另一个字符串

来自分类Dev

如何使用正则表达式按最后一个字符拆分字符串?

来自分类Dev

正则表达式替换特定匹配项的字符串的第一个和最后一个字符

来自分类Dev

R:在一个字符串中匹配M个正则表达式后提取N个字符

来自分类Dev

如果文本仅包含一个字符串,则匹配文本的正则表达式

来自分类Dev

正则表达式删除与第一个字符串匹配的行?

来自分类Dev

使用Ansible在正则表达式匹配行的末尾附加一个字符串

来自分类Dev

正则表达式以匹配多个字符串之一,然后是另一个字符串

来自分类Dev

正则表达式匹配字符串,长度为3-6个字符,至少一个字母,没有重复的“-”

来自分类Dev

得到一个字符串的PHP正则表达式匹配

来自分类Dev

正则表达式PCRE:验证字符串以匹配第一个字符串集而不是最后一个字符串

来自分类Dev

正则表达式匹配字符串的第一个和最后一个字符,但是为什么呢?

来自分类Dev

两个可能包含另一个字符串的字符串之间的正则表达式匹配

来自分类Dev

Python 3-正则表达式-匹配少一个字符的字符串

来自分类Dev

正则表达式替换特定匹配项的字符串的第一个和最后一个字符

来自分类Dev

正则表达式删除与第一个字符串匹配的行?

来自分类Dev

正则表达式匹配一个字符串但失败相同

来自分类Dev

正则表达式匹配另一个字符串之后出现的字符串

来自分类Dev

使用正则表达式替换匹配字符串的最后一个字符

来自分类Dev

如何使用正则表达式从另一个字符串的开头删除多个字符串

来自分类Dev

正则表达式匹配字符串中的最后一个字符 - C#

来自分类Dev

正则表达式匹配行与字符串 AND 没有另一个字符串

Related 相关文章

  1. 1

    在两个字符串(包括第一个字符串)之间匹配的正则表达式

  2. 2

    Java正则表达式:如果右括号是字符串中的最后一个字符,则匹配圆括号中的任何数字

  3. 3

    正则表达式匹配不包括第一个字符的字符串

  4. 4

    使用NSPredicate或正则表达式检查一个大字符串是否包含另一个字符串

  5. 5

    正则表达式多个元素一个字符串

  6. 6

    正则表达式以匹配2个字符串并包含另一个字符串

  7. 7

    Powershell正则表达式匹配第一个字符串以外的字符串

  8. 8

    正则表达式从一个字符串到另一个字符串

  9. 9

    如何使用正则表达式按最后一个字符拆分字符串?

  10. 10

    正则表达式替换特定匹配项的字符串的第一个和最后一个字符

  11. 11

    R:在一个字符串中匹配M个正则表达式后提取N个字符

  12. 12

    如果文本仅包含一个字符串,则匹配文本的正则表达式

  13. 13

    正则表达式删除与第一个字符串匹配的行?

  14. 14

    使用Ansible在正则表达式匹配行的末尾附加一个字符串

  15. 15

    正则表达式以匹配多个字符串之一,然后是另一个字符串

  16. 16

    正则表达式匹配字符串,长度为3-6个字符,至少一个字母,没有重复的“-”

  17. 17

    得到一个字符串的PHP正则表达式匹配

  18. 18

    正则表达式PCRE:验证字符串以匹配第一个字符串集而不是最后一个字符串

  19. 19

    正则表达式匹配字符串的第一个和最后一个字符,但是为什么呢?

  20. 20

    两个可能包含另一个字符串的字符串之间的正则表达式匹配

  21. 21

    Python 3-正则表达式-匹配少一个字符的字符串

  22. 22

    正则表达式替换特定匹配项的字符串的第一个和最后一个字符

  23. 23

    正则表达式删除与第一个字符串匹配的行?

  24. 24

    正则表达式匹配一个字符串但失败相同

  25. 25

    正则表达式匹配另一个字符串之后出现的字符串

  26. 26

    使用正则表达式替换匹配字符串的最后一个字符

  27. 27

    如何使用正则表达式从另一个字符串的开头删除多个字符串

  28. 28

    正则表达式匹配字符串中的最后一个字符 - C#

  29. 29

    正则表达式匹配行与字符串 AND 没有另一个字符串

热门标签

归档