现在我有一个看起来像"\\w+ \\w+"
的正则表达式来查找双字短语,但是,它们没有重叠。例如,如果我的句子是The dog ran inside
,那么当我需要显示"The dog", "ran inside"
时,输出会显示"The dog", "dog ran", "ran inside"
。我知道有办法做到这一点,但我对使用正则表达式知道如何做到这一点太新了。
谢谢!
答案 0 :(得分:1)
您可以使用前瞻,捕获组和单词边界锚来执行此操作:
Pattern regex = Pattern.compile("\\b(?=(\\w+ \\w+))");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group(1));
}
答案 1 :(得分:0)
纯粹使用正则表达式是不可能的,你不能两次匹配相同的字符(“dog”不能在两个单独的组中)。像这样的东西根本不需要正则表达式,你可以简单地用空格分割字符串并将它组合起来然后你喜欢:
>>> words = "The dog ran inside".split(" ")
>>> [" ".join(words[i:i+2]) for i in range(len(words)-1)]
['The dog', 'dog ran', 'ran inside']
如果这不能解决您的问题,请提供有关您要完成的具体内容的更多详细信息。
答案 2 :(得分:0)
使用前瞻来获得第二个单词,将非前瞻与前瞻部分连接起来。
# This is Perl. The important bits:
#
# $1 is what the first parens captured.
# $2 is what the second parens captured.
# . is the concatenation operator (like Java's "+").
while (/(\w+)(?=(\s+\w+))/g) {
my $phrase = $1 . $2;
...
}
抱歉,不了解足够的Java,但这也很容易用Java做。
答案 3 :(得分:0)
简单(大字符串更快)的方法是使用 split :
final String[] arrStr = "The dog ran inside".split(" ");
for (int i = 0, n = arrStr.length - 1; i < n; i++) {
System.out.format("%s %s%n", arrStr[i], arrStr[i + 1]);
}
out put
The dog
dog ran
ran inside
没有找到正则表达式的技巧