正则表达式:检查是不是有超过 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 个换行符的主要内容,如果未能解决你的问题,请参考以下文章