匹配长度为“n”的 1,2,3,4 次重复,且至少以“m” 5 秒或“m” 6 秒结尾,第一个和最后一个匹配除外

问题描述 投票:0回答:1

我有一个仅由符号

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 代码中的答案。

regex julia
1个回答
0
投票

我想找到字符串中包含重复的部分 长度为 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
表示两个不同的计数。

作为最后一个条件,仅适用于第一场和最后一场比赛,...

第一场和最后一场比赛是什么?这部分要求我不太清楚。

© www.soinside.com 2019 - 2024. All rights reserved.