C# 使用新行提取两个字符串之间的子字符串

C# 使用新行提取两个字符串之间的子字符串,c#,regex,C#,Regex,请帮我写一个正则表达式来提取* 注意*字符的数量可能会有所不同 我尝试了(\*\n)([\s\s]*)(\n\*),但它将所有内容分组为1个块,而不是2个块 预期产出 一, 二, 测试字符串: ******* Thanks for contacting us Regards, XXX ************ It wAS a pleasure talking with you Good to see you today ******* 你可以用 var re

请帮我写一个正则表达式来提取*
注意*字符的数量可能会有所不同

我尝试了
(\*\n)([\s\s]*)(\n\*)
,但它将所有内容分组为1个块,而不是2个块

预期产出

一,

二,

测试字符串:

*******

Thanks for contacting us    
Regards,    
XXX

************

It wAS  a pleasure talking with you    
Good to see you today

*******
你可以用

var results = Regex.Matches(s, @"(?s)\*{3,}(.*?)(?=\*{3,}|$)")
    .Cast<Match>()
    .Select(x => x.Groups[1].Value.Trim())
    .ToList();
请参阅(它也可以按原样在上述代码中使用。)

详细信息

  • (?m)
    -一个
    RegexOptions。多行
    修饰符,用于使
    ^
    $
    匹配行的开始/结束
  • ^
    -行首
  • \*{3,}
    -3个或更多星号
  • *
    -行的其余部分(或使用
    \r?$
    确保到达行的末尾)
  • ((?:\r?\n(?)*)*)
    -第1组:零个或多个
    • \r?\n(?\*{3,})
      -CRLF或LF行结尾,后面不跟3个或更多的
      *
      s
    • *
      -字符串的其余部分

Regex.Matches(s,@“(?s)\*{3,}(.*?(=\*{3,}}$)”)Cast().Select(x=>x.Groups[1].Value.Trim()).ToList()
它只匹配第一个组
*******

Thanks for contacting us    
Regards,    
XXX

************

It wAS  a pleasure talking with you    
Good to see you today

*******
var results = Regex.Matches(s, @"(?s)\*{3,}(.*?)(?=\*{3,}|$)")
    .Cast<Match>()
    .Select(x => x.Groups[1].Value.Trim())
    .ToList();
(?m)^\*{3,}.*((?:\r?\n(?!\*{3,}).*)*)