gpt4 book ai didi

c# - 用于解析重复组的正则表达式

转载 作者:行者123 更新时间:2023-11-30 22:54:16 26 4
gpt4 key购买 nike

源字符串包含这样的标签:

>>>tagA
contents 1
<<<tagA
...
>>>tagB
contents 2
<<<tagB
...

我需要提取其中的标签名称和内容。这就是我所拥有的,但仍然无法正常工作:

(?<=(>>>(?<tagName>.+)$))(?<contents2>.*?)(?=(<<<.+)$)

results到两个匹配项,但第二个匹配项中的 tagName 捕获了多行:

tagA 
contents 1
<<<tagA

我做错了什么?

最佳答案

你可以使用

>>>(?<tagName>.+?)[\r\n]+(?s:(?<contents>.*?))<<<

参见 regex demo

详情

  • >>> - 一个 >>>子串
  • (?<tagName>.+?) - 组“tagName”:尽可能少的任何 1+ 个字符
  • [\r\n]+ - 一个或多个 CR 或 LF 符号
  • (?s:(?<contents>.*?)) - 组“内容”:匹配任何 0+ 个字符的内联修饰符组,但尽可能少
  • <<< - 一个 <<<子串。

在 C# 中:

var matches = Regex.Matches(s, @">>>(?<tagName>.+?)[\r\n]+(?s:(?<contents>.*?))<<<");

参见 C# demo :

var s = ">>>tagA\ncontents 1\n<<<tagA\n...\n>>>tagB\ncontents 2\n<<<tagB\n...";
var matches = Regex.Matches(s, @">>>(?<tagName>.+?)[\r\n]+(?s:(?<contents>.*?))<<<");
foreach (Match m in matches) {
Console.WriteLine(m.Groups["tagName"].Value);
Console.WriteLine(m.Groups["contents"].Value);
}

输出:

tagA
contents 1

tagB
contents 2

关于c# - 用于解析重复组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56417696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com