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?$
-第1组:零个或多个((?:\r?\n(?)*)*)
-CRLF或LF行结尾,后面不跟3个或更多的\r?\n(?\*{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,}).*)*)