在C#中如何匹配包含CRLF的字符串?(RegEx)

4

我正在尝试创建一个正则表达式以匹配包含CRLF的字符串。这是为了验证给定字符串中是否存在CRLF。

我正在使用:

Regex.IsMatch(allRead, "^the dog jumped\r\n$", RegexOptions.Singleline)

但是我没有取得任何成功。

1
我建议您查看类似于http://www.ultrapico.com/Expresso.htm(免费)的工具,以便快速测试不同的模式、输入并查看模式匹配的原因解释。 - Grhm
3个回答

3
尝试以下两种方法之一:
Regex.IsMatch(allRead, "the dog jumped\\r\\n")
Regex.IsMatch(allRead, @"the dog jumped\r\n")

除非您期待allread仅包含“然后狗跳了”,否则不需要使用^-换句话说,除非您只想匹配字符串的开头(或者如果您使用RegexOptions.Multiline,则匹配行的开头)

您也可能不需要使用$,除非您想确保新行是字符串的结尾(或者如果您使用RegexOptions.Multiline,则下一行为空白)


2

请按照以下方式尝试。

Regex.IsMatch(allRead, "^the dog jumped\r\n$", RegexOptions.Multiline)

这可能会对您有所帮助。


1
你正在使用 singleLine 选项,并在模式中添加换行符。这样做是否有些不妥?请尝试使用 Multiline
你是想获取整个字符串的最后一行吗?
编辑...
使用此输入:
gd
fg
dfg
the dog jumped
the cat jumped
the dog jumped
the dog jumped

打开多行模式,尝试使用这个正则表达式...

^the dog jumped$

希望这有帮助...

我在这里有点困惑。我尝试了多行和单行正则表达式选项,但似乎都不能正常工作。 - Derrick Bell
1
我使用SingleLine来匹配多行。根据http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx,单行选项使“.”匹配包括换行符在内的任何字符。因此,“hello.*world”不会匹配“hello \n world”(一个多行文本块),除非指定了SingleLine选项!这可能是有史以来最令人困惑的选项名称。 - Grhm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接