0

一連の数字があるとしましょう

1 2 3 4 1 2 3 4

ご覧のとおり、ここにサイクルがあります。

1 2 3 4

今、パターンに一致する正規表現を作成しようとしています。パターンは、シーケンスの半分の長さ、または 2 つの数字の長さにすることができます。これは私がこれまでに持っているものです

Pattern cycle = Pattern.compile("((\\d+\\s)+(\\d+\\s))\\1");

スペースで区切られた数字の文字列が与えられます。キャプチャ グループを使用しようとしていますが、理解できません。何か助けはありますか?

4

2 に答える 2

3

あなたはこれを使うことができます:

(\d(?:\s+\d)+)\s+\1

これは、スペースで区切られた2桁以上に一致し、それをキャプチャして、別のスペース文字の直後にキャプチャされたものを探します。

(            # begin capturing group
    \d       # a digit, followed by
    (?:      # begin non capturing group
        \s+  # one or more space characters, followed by
        \d   # a digit
    )+       # end non capturing group, repeated once or more,
)            # end capturing group `\1`, followed by
\s+          # one or more spaces, followed by
\1           # the exact content of the first captured group

注:繰り返しの間隔はまったく同じであると想定しています。

于 2013-01-02T10:21:17.287 に答える
0

私は質問をよりよく理解しようとしています。あなたの問題は、与えられた文字列のサイクル/パターンを検出することに似ていますか?

このパターンに似たものはありますか?

 "([0-9]+?)\1+"

このパターンは、指定された数のストリームで繰り返しパターンをキャプチャしようとします。

この質問で説明したものと同様に、Pythonで繰り返しサイクルを見つけるための正規表現パターンの何が問題になっていますか?

于 2013-01-02T11:27:20.587 に答える