匹配3位数的多行正则表达式模式

时间:2013-07-22 20:18:12

标签: .net regex c#-4.0

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

没关系:

123
456
789

这不行:

123
123789
456

这不行(注意中间和结尾处的空行):

123

456

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

2 个答案:

答案 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)*$"