正则表达式:检查是不是有超过 x 个换行符

Posted

技术标签:

【中文标题】正则表达式:检查是不是有超过 x 个换行符【英文标题】:Regex: Check if there are more than x line breaks正则表达式:检查是否有超过 x 个换行符 【发布时间】:2021-09-30 15:33:45 【问题描述】:

我需要根据换行符的出现来验证一个字符串。 如果不超过 6 个换行符,则输入是可以的。 如果有超过 6 个换行符,输入就不行了。 当然,换行符之间可以(但不是必须)出现其他字符。 我只需要在正则表达式中解决这个问题,因为我无法添加任何额外的代码。

我很担心这样的事情:

/^(\r\n|\r|\n)0,6$/ // not working :[

【问题讨论】:

试试return Regex.Matches(input, @"\r\n?|\n").Count <= 6; 谢谢,但问题是我只能控制正则表达式字符串。我无法修改任何代码。对不起,我应该提到的。 [编辑帖子] 使用这个正则表达式匹配不超过 6 个换行符的输入:\A(?:.*\r?\n)0,6.*\z 【参考方案1】:

你可以使用

Regex.IsMatch(input, @"^.*(?:\n.*)0,6\z")

或者,如果您的行结尾可以是单个 CR/LF,您应该记住,在 .NET 正则表达式中,. - 没有 RegexOptions.Singleline 选项 - 匹配除 LF 之外的任何字符,并匹配 CR 字符,所以你需要使用类似的东西

Regex.IsMatch(input, @"^[^\r\n]*(?:(?:\r\n?|\n)[^\r\n]*)0,6\z")

正则表达式匹配

^ - 字符串开头 .* - 除换行符 (\n) 以外的任何零个或多个字符尽可能多的字符(= 一行) (?:\n.*)0,6 - 0 到 6 个连续出现的 LF 字符,然后尽可能多地出现除 LF 字符之外的任何零个或多个字符 \z - 字符串的最后。

第二个模式匹配

^ - 字符串开头 [^\r\n]* - 除了 LF 和 CR 之外,尽可能多的零个或多个字符 (?:(?:\r\n?|\n)[^\r\n]*)0,6 - 零到六次出现 (?:\r\n?|\n) - CRLF、CR 或 LF [^\r\n]* - 除了 LF 和 CR 之外,尽可能多的零个或多个字符 \z - 字符串的最后。

【讨论】:

以上是关于正则表达式:检查是不是有超过 x 个换行符的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式

正则表达式字符匹配

正则表达式

正则表达式匹配换行

正则表达式匹配超过 2 个空格但不匹配新行

mongo 正则表达式查询是不是有字符限制,如果正则表达式搜索字符串超过该限制,则会引发错误