为什么以下代码在 C# 中找不到任何内容,但在我在线测试时可以正常工作?
Match m = Regex.Match(@"abc
cd", "^abc[ \t]*$", RegexOptions.Multiline);
我正在使用这个在线正则表达式测试器: http: //derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
我希望得到“abc”
为什么以下代码在 C# 中找不到任何内容,但在我在线测试时可以正常工作?
Match m = Regex.Match(@"abc
cd", "^abc[ \t]*$", RegexOptions.Multiline);
我正在使用这个在线正则表达式测试器: http: //derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
我希望得到“abc”
对于多行字符串,您可以在不使用 Regex 的情况下删除末尾的空格。
string trimEnd = string.Join("\n", yourString.Split('\n').Select(x => x.TrimEnd()));
如果你想得到abc
你可以使用:^abc.*$
代替。
如果你想得到所有,你可以使用:(?s)^abc.*$
代替。
我认为您的问题是: [ \t] 无法匹配换行符,因此您也可以更改代码以匹配换行符,如下所示:
Match m = Regex.Match(@"abc
cd", @"^abc[ \t\r]*$", RegexOptions.Multiline);
据我了解,您没有捕获任何组,因此您一无所获。
首先试试这个:
Debug.Print(Regex.IsMatch(@"abc
cd", "^abc[ \t]*$", RegexOptions.Multiline).ToString());
你应该得到true
,因为有匹配。
然后试试这个:(注意'^'之后和'$'之前的大括号'()')
Debug.Print(Regex.Match(@"abc
cd", "^(abc[ \t]*)$", RegexOptions.Multiline).ToString());
你应该得到一个结果Output Window
。
希望能帮助到你!
我想我知道这里发生了什么。在我的文本文件中,EOL 是 CRLF。但是 C# 正则表达式将 LF 视为 EOL(即“$”)。所以在我的情况下,正则表达式找不到 CR 并声称失败。@"^abc[ \t\r]*$" 有效。