任何人都可以帮助我使用匹配并检查以下场景的正则表达式模式吗?我正在尝试匹配用返回字符分隔的文本。每行应该只有 3 位数字 (\d{3}),最多 100 行。
还行吧:
123
456
789
这不行:
123
123789
456
这是不行的(注意中间和末尾的空行):
123
456
我将不胜感激任何建议和帮助。谢谢。
所以整个文件一定是这样的?然后尝试
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?
放在 CR 和 LF 之间来确保在每个三个字符位之后有一行结束,这是(奇怪的).NET 认为它应该匹配的位置。 $
一种方法是简单地根据您的初始正则表达式 (\d{3}) 检查每一行。另一种方法是将 \r \n 添加到您的正则表达式并允许重复
"(\d{3}\r?\n)*"
为了过滤掉案例 3,您只需要添加开头和结尾以表明您要匹配整个文件;(^ 指定开始,$ 指定结束)
"^(\d{3}\r?\n)*$"