此问题已在此处有答案:
Regex that matches a newline (\n) in C#(5个答案)
C# Regex.Replace Multiple Newlines(2个答案)
Regex double new line(4个答案)
3天前关闭。
为什么同样的模板在online compiler和regex101.com中可以正常工作,但在visual studio项目中返回空字符串?
using System;
using System.Text.RegularExpressions;
string pattern = @"^[A-Z][\s\S]*?[.!?](?:\n\n|\z)";
string input = @"
First question.
1)a 2)b 3)c
Second question.
1)10 2)1 3)0";
RegexOptions options = RegexOptions.Multiline;
foreach (Match match in Regex.Matches(input, pattern, options))
{
Console.WriteLine($"{match.Value}");
}
我尝试重写模式和输出方法,但没有任何改变。Visual Studio 2022 v.17.4.4
Windows 10 Pro v.22H2
1条答案
按热度按时间tvz2xvvm1#
正则表达式查看Unix样式的行结束符。也就是说:换行(
\n
)。同时,如果你在Windows上开发,你的行尾将是回车+换行符(
\r\n
)。因为您的代码将字符串作为代码中的文本值,所以它的换行符与代码中的换行符相同。您可以通过以下两种方式之一对此进行测试:
1.将代码更改为
string input = "First question.\n\n1)a 2)b 3)c\n\nSecond question.\n\n1)10 2)1 3)0";
1.将代码文件中的行尾替换为
\n
而不是\r\n
。假设你想处理这两种情况,你只需要选择性地处理回车,你可以通过在你的
\n
之前添加\r?
来完成: