【问题标题】: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

标签: c# .net regex


【解决方案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 - 字符串的最后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2012-12-16
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多