0

任何人都可以帮助我使用匹配并检查以下场景的正则表达式模式吗?我正在尝试匹配用返回字符分隔的文本。每行应该只有 3 位数字 (\d{3}),最多 100 行。

还行吧:

123
456
789

这不行:

123
123789
456

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

123

456

我将不胜感激任何建议和帮助。谢谢。

4

2 回答 2

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?放在 CR 和 LF 之间来确保在每个三个字符位之后有一行结束,这是(奇怪的).NET 认为它应该匹配的位置。 $

于 2013-07-22T20:20:46.340 回答
1

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

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

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

"^(\d{3}\r?\n)*$"
于 2013-07-22T20:24:58.173 回答