【问题标题】:multiline regex pattern that match 3 digits匹配 3 位数字的多行正则表达式模式
【发布时间】:2013-07-22 20:18:11
【问题描述】:

谁能帮我一个正则表达式模式来匹配并检查以下场景?我正在尝试匹配用返回字符分隔的文本。每行只能包含 3 位数字 (\d{3}),最多 100 行。

没关系:

123
456
789

这样不行:

123
123789
456

这样不行(注意中间和末尾的空行):

123

456

如果有任何建议和帮助,我将不胜感激。谢谢。

【问题讨论】:

    标签: .net regex c#-4.0


    【解决方案1】:

    所以整个文件必须是这样的?那就试试吧

    new Regex(@"\A(?:\d{3}\r?\n)*\z")
    

    说明:

    \A     # Start of string
    (?:    # Match the following (non-capturing) group:
     \d{3} #  - three digits
     \r?\n #  - one CRLF or LF (linebreak)
    )*     # any number of times (0 or more)
    \z     # until the very end of the string
    

    如果文件可能不以换行符结尾(从您的描述中不确定),您可以使用

    new Regex(@"\A(?:\d{3}\r?$\n?)*\z", RegexOptions.Multiline)
    

    这最初使换行符成为可选 (\r?\n?) 但通过将行尾 anchor $ 放置在 CR 和 LF 之间来确保在每个三个字符位之后都有一行结束,这就是 (奇怪).NET 认为它应该匹配。

    【讨论】:

    • 非常感谢您的快速回复。效果非常好!
    【解决方案2】:

    执行此操作的一种方法是简单地根据您的初始正则表达式 (\d{3}) 检查每一行。 另一种方法是将 \r \n 添加到您的正则表达式并允许重复

    "(\d{3}\r?\n)*"
    

    为了过滤掉case 3,你只需要添加开头和结尾来表明你想要匹配整个文件; (^ 指定开始,$ 指定结束)

    "^(\d{3}\r?\n)*$"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 2020-10-10
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      相关资源
      最近更新 更多