【发布时间】:2021-08-15 07:34:06
【问题描述】:
这是一段代码
var content = @"Script 1 Line 1;
GO
Script 1 Line 2;
GO
";
var regex = new Regex("^GO$", RegexOptions.Multiline);
MatchCollection mc = regex.Matches(content);
Debug.WriteLine(mc.Count);
当我在 Roslyn 或 Framework 4.7.2 的“dotnetfiddle.com”中运行此代码时 - 结果相同 - 2 matches。
当我在单元测试项目中运行此代码时,直接在 Framework 4.7.2 中的 TestMethod - 0 matches
当我在针对 netstandard2.0 编译的项目中的类方法中运行此代码时,-1 match
这是我需要解决的主要问题
附加测试
var sb = new StringBuilder();
sb.AppendLine("Script 1 Line 1;");
sb.AppendLine("GO");
sb.AppendLine("Script 1 Line 2;");
sb.AppendLine("GO");
sb.AppendLine();
var content = sb.ToString();
Console.WriteLine(content);
// ^^^ changed string creation ^^^
var regex = new Regex("^GO$", RegexOptions.Multiline);
MatchCollection mc = regex.Matches(content);
Console.WriteLine(mc.Count);
有了这个^^^,即使是“dotnetfiddle.com”也会返回0 matches
我在这里仍然没有得到图片,但显然是不同编辑器中的换行符。那为什么字符串生成器会这样做呢?
【问题讨论】:
-
我可能没有直接的解决方案,但只有一件事..你能尝试在单行中使用整个文本吗?看到它在所有环境中仍然给出相同的结果。我怀疑操作系统及其处理行尾的方式。
-
@dotnetstep 但是如果我正在寻找
^GO$,即start-GO-end,单行将如何工作?可以给我试试的模式吗? -
@dotnetstep 试过
var content = "Script 1 Line 1;" + Environment.NewLine + "GO" + Environment.NewLine + "Script 1 Line 2;" + Environment.NewLine + "GO" + Environment.NewLine;-- 不走运 -
你试过
"^GO\r?$"吗? -
相关documentation。简而言之,“$”正在寻找
\n,但根据环境,新行可以改为\r\n。
标签: c# .net regex .net-standard-2.0