为什么以下代码在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”
答案 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] * $”有效。