regex C#正则表达式仅在Visual Studio中运行时返回空字符串,而在其他环境中不返回[重复]

eit6fx6z  于 2023-05-30  发布在  C#
关注(0)|答案(1)|浏览(169)

此问题已在此处有答案

Regex that matches a newline (\n) in C#(5个答案)
C# Regex.Replace Multiple Newlines(2个答案)
Regex double new line(4个答案)
3天前关闭。
为什么同样的模板在online compilerregex101.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.4Windows 10 Pro v.22H2

tvz2xvvm

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?来完成:

string pattern = @"^[A-Z][\s\S]*?[.!?](?:\r?\n\r?\n|\z)";

相关问题