我需要在一系列以空格分隔的整数中找到重复的子序列。
例如,对于字符串
1 2 3 4 5 6 7 8 9 10 8 9 10 11 12
它将是
8 9 10
我想出了这个正则表达式
(?< = \ s)(\ d +(:?\ d +(?=))+)\ 1 +
并且它的效果很好,直到重复次数超过4次,就像这里:
1 2 3 4 5 6 7 8 9 10 8 9 10 8 9 10 8 9 10 11 12
现在,第一组捕获最长的重复次数,即
8 9 10 8 9 10
我应该怎样做才能抓住最短的一个?
答案 0 :(得分:1)
你想要这种模式:
\b(\d+(:? \d+\b)+?)(?: \1)+\b
\b
,它应该适合您。+?
代替+
。(?: \1)+
代替\1+
:您希望每次重复都有额外的空间。你抱怨重复四次,但你的模式不匹配三(1 2 1 2 1 2)。\b
以避免11 12 11 12999
匹配。