2

現在、2 単語のフレーズを検索するように見える正規表現があります"\\w+ \\w+"が、それらは重複していません。たとえば、私の文が だった場合、表示する必要があるときにThe dog ran inside出力が表示されます。これを行う方法があることは知っていますが、これを行う方法を知るには正規表現を使用するのが初めてです。"The dog", "ran inside""The dog", "dog ran", "ran inside"

ありがとう!

4

4 に答える 4

1

You can do this with a lookahead, a capturing group and a word boundary anchor:

Pattern regex = Pattern.compile("\\b(?=(\\w+ \\w+))");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group(1));
} 
于 2012-09-18T07:42:01.267 に答える
0

これは純粋に正規表現では不可能です。同じ文字を 2 回一致させることはできません (「犬」を 2 つの別々のグループにすることはできません)。このようなものは正規表現をまったく必要としません。文字列をスペースで分割して、好きなように組み合わせることができます。

>>> words = "The dog ran inside".split(" ")
>>> [" ".join(words[i:i+2]) for i in range(len(words)-1)]
['The dog', 'dog ran', 'ran inside']

それでも問題が解決しない場合は、何を達成しようとしているのかについて詳細をお知らせください。

于 2012-09-18T06:20:18.823 に答える
0

先読みを使用して 2 番目の単語を取得し、非先読み部分と先読み部分を連結します。

# 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 でも簡単に実行できるはずです。

于 2012-09-18T06:20:35.513 に答える
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]);
    }

アウトプット

The dog
dog ran
ran inside

正規表現でトリックが見つかりません

于 2012-09-18T07:31:17.997 に答える