我有一个仅由符号
1, 2, 3, 4, 5, 6
组成的字符串。我将“分层”提出问题,因为它非常复杂,至少对我来说(我不知道如何通过正则表达式)。
我想找到字符串中包含 2、3、4 或 1 个长度
n
或更多重复的部分,但字符“1”不应该对长度计数产生影响。
我还希望找到该模式,当且仅当它以至少
m
出现的字符 5 或 m
出现的字符 6 结尾。例如,如果 n=10, m=10
,请考虑以下字符串(其中空格仅用于清晰,字符串本身不包含空格):
A = "66666666611166111 23423412342341133355555555555 2342345"
中间的图案要匹配。因为它是长度 > 10 的 2、3 和 4 秒的重复(忽略 1,这不算数),并且以
11 >= 10
5 秒结束。
一个更复杂的示例,有多个匹配项(由空格显示):
A = "66666666611166111 23423412342341133355555555555 2342345515 2341123423423423423466666666666666"
重要的是,我们还希望在末尾匹配长度为
n
(忽略 1)的 2,3,4 次重复(也就是说,不是以 5
或 6
结尾,而是以空字符串结尾)。例如,在
A = "66666666611166111 23423412342341133355555555555 2342345515 23411234234234234234"
我们应该匹配第二个和第四个模式。
作为最后一个条件,only对于第一场和最后一场比赛,我们必须施加
n=1
和m=1
。也就是说,对于第一个和最后一个匹配,无论模式结束有多少个 5 或 6,我们仍然应该匹配它。例如,在
A = "66666666611166111 2342341234234113336 62342345515 2341123423423423423455555555555555 212315551235555 222222222222266"
我们应该匹配第二段,因为它是所需长度的 2,3,4,1 的第一次重复,无论它仅以单个 6 结尾。我们还应该计算最后一段,因为它是所需长度的最后一次重复 2,3,4,1,无论它仅以两个 6 结尾。第四个图案也应该匹配。
如何构建如此复杂的正则表达式?特别感谢 Julia 代码中的答案。
我想找到字符串中包含重复的部分 长度为 n 或以上的 2、3、4 或 1,但字符“1”不应 有助于长度计数。
\b1*(?:[2345]1*){n,}\b
的正则表达式,其中 n
被所需的值替换。对于这些示例,开头和结尾处的 \b
是空格和数字之间的单词边界。两次出现 1*
允许出现任意数量的 1
数字,而无需对其进行计数。 {n,}
表示括号内的项目应该出现 n 次或多次,前面表示数字 2 或 3 或 4 或 5 之一,后跟零个或多个 1。 (?:...)
是非捕获群。
我也希望找到该模式,当且仅当它以至少 m 结尾 字符 5 出现次数或字符 6 出现 m 次。对于 例如,如果 n=10,m=10,请考虑以下字符串(其中 空格只是为了清楚起见,字符串本身不包含空格 空格):
将上述正则表达式扩展为尾随 5 或 6 给出:
\b1*(?:[234]1*){n,}(?:5{n,}|6{m,})\b
再次用数字替换 n
和 m
。请注意,该问题使用 n
表示两个不同的计数。
作为最后一个条件,仅适用于第一场和最后一场比赛,...
第一场和最后一场比赛是什么?这部分要求我不太清楚。