正则表达式过滤掉行尾的空格

时间:2013-08-28 08:23:37

标签: c# regex

为什么以下代码在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 个答案:

答案 0 :(得分:1)

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

string trimEnd = string.Join("\n", yourString.Split('\n').Select(x => x.TrimEnd()));

答案 1 :(得分:1)

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

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

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

Match m = Regex.Match(@"abc
        cd", @"^abc[ \t\r]*$", RegexOptions.Multiline);

答案 2 :(得分: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中获得结果。

希望它有所帮助!

答案 3 :(得分:0)

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