如何捕获带缩进的字符串组
本文关键字:字符串 缩进 何捕获 | 更新日期: 2023-09-27 18:12:47
我想捕获这个字符串中的每个if-construct作为一个
if a > b
do this
do that
if a == c
do this
do that
我想有一个匹配的
if a > b
do this
do that
和
if a == c
do this
do that
到目前为止我还没有把新的if结构分开
if('W+'w+)+'n't
你可以使用这个基于前瞻的正则表达式:
^('s*if['s'S]+?)(?=^'s*if|'z)
in MULTILINE
mode.
RegEx演示
['s'S]+
将匹配1个字符,包括换行符, (?=^'s*if|'z)
是一个前瞻性,将确保断言当前匹配的旁边是另一个if
块或输入结束。
无论您想做什么,都应该考虑编写一个解析器。从长远来看,这将使事情更简单。
如果你坚持使用正则表达式,那么…
^([ ]*)if.+'r?'n('1[ ]+).+(?:'r?'n'2(?!if).+)*
演示 用法:
var re = new Regex(@"^([ ]*)if.+'r?'n('1[ ]+).+(?:'r?'n'2(?!if).+)*", RegexOptions.Multiline);
让我们把它分成几个部分:
-
^([ ]*)if.+'r?'n
捕获第一个if
,直到换行 -
('1[ ]+).+
捕获下一行。它需要更多的空格(所以它是缩进的)。 -
(?:'r?'n'2(?!if).+)*
捕获下一行,直到下一个if
。它要求与if
后的第一行相同的空格量。