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

这将匹配由空格分隔的两个或多个数字,捕获它并在另一个空格字符之后查找捕获的内容:

(            # 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 回答