示例文本:

heading1
foo=bar
baz=qux

heading2
spam=ham

heading3
this=that

我希望文本从heading1heading2(不包括).

所以.com/r/yljACG/3" rel="nofollow noreferrer">I tried是从"heading1""\n\n"的非贪婪匹配,但它仍然是贪婪和过度匹配的:

var result = Regex.Match(text, "heading1\n(.*)\n{2}?", RegexOptions.Singleline)
  .Groups[1]
  .Value;

(我已经有了一个在"heading1""heading2"之间搜索的解决方案,但我更喜欢使用上面的方法作为非贪婪匹配的学习练习.)

UPDATE:
My question is simpler, has source text, is for C# specifically. It's easier to understand the problem. The linked question is technically relevant, but harder to apply to this case.

推荐答案

你在错误的地方使用了非贪婪,因为\n{2}是一个固定的量词,根本不需要贪婪.

相反,你应该通过使用.*?来使.*不贪婪,这样它就不会自己匹配两个换行符:

heading1\n(.*?)\n{2}

.net相关问答推荐

StackExchange.Redis和NRedisStack包有什么不同?

使用.NET 8时无法识别运行标识符

仅使用 .NET GetBytes 方法转换有效字节而不创建问号

如果只有一个 : 存在于字符串中,则提取冒号后的内容

.Net MAUI Android 无法与 API localhost 对话

F#:跨度、提升和底部类型(或缺乏)

将 Moq 模拟对象传递给构造函数

.NET - WindowStyle = hidden 与 CreateNoWindow = true?

为什么 Any() 不适用于 c# null 对象

string.Format 如何处理空值?

ICommand MVVM 实现

如何使用 log4net 记录跟踪消息?

获取 .NET Framework 目录路径

如何将 UI Dispatcher 传递给 ViewModel

无法在 Windows 10 上安装 Windows SDK 7.1

dotnet 恢复警告 NU1701

使 HashSet 不区分大小写

在 .NET 中,null 的哈希码是否应该始终为零

并发字典正确用法

从 bcp 客户端接收到 colid 6 的无效列长度