0

为什么以下代码在 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”

4

4 回答 4

1

对于多行字符串,您可以在不使用 Regex 的情况下删除末尾的空格。

string trimEnd = string.Join("\n", yourString.Split('\n').Select(x => x.TrimEnd()));
于 2013-08-28T08:27:42.183 回答
1

如果你想得到abc 你可以使用:^abc.*$代替。

如果你想得到所有,你可以使用:(?s)^abc.*$代替。

我认为您的问题是: [ \t] 无法匹配换行符,因此您也可以更改代码以匹配换行符,如下所示:

Match m = Regex.Match(@"abc
        cd", @"^abc[ \t\r]*$", RegexOptions.Multiline);
于 2013-08-28T08:28:30.963 回答
0

据我了解,您没有捕获任何组,因此您一无所获。

首先试试这个:

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

希望能帮助到你!

于 2013-08-28T09:02:59.637 回答
0

我想我知道这里发生了什么。在我的文本文件中,EOL 是 CRLF。但是 C# 正则表达式将 LF 视为 EOL(即“$”)。所以在我的情况下,正则表达式找不到 CR 并声称失败。@"^abc[ \t\r]*$" 有效。

于 2013-08-28T13:04:25.590 回答