任何人都可以帮助我使用匹配并检查以下方案的正则表达式模式吗?我正在尝试匹配用返回字符分隔的文本。每行应该只有3位数字(\ d {3}),最多100行。
没关系:
123
456
789
这不行:
123
123789
456
这不行(注意中间和结尾处的空行):
123
456
我将不胜感激任何建议和帮助。感谢。
答案 0 :(得分:3)
所以整个文件必须如下所示?然后尝试
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认为应该匹配的地方。
答案 1 :(得分:1)
执行此操作的一种方法是根据初始正则表达式检查每一行(\ d {3})。 另一种方法是将\ r \ n添加到正则表达式并允许重复
"(\d{3}\r?\n)*"
为了过滤掉案例3,你只需要添加开头和结尾来表明你想要匹配整个文件; (^指定开头,$指定结束)
"^(\d{3}\r?\n)*$"