繁体   English   中英

正则表达式匹配以提取多行文本区域(C#)

[英]Regex matching on to extract multi-line text regions (C#)

我希望捕获以以下格式创建的大文本块中的文本区域:

...
[region:region-name]
multi line
text block
[/region]
...
[region:another-region-name]
more
multi-line text
[/region]

我几乎已经解决了

\[region:(?'link'.*)\](?'text'(.|[\r\n])*)\[/region\]

如果我在整个文本中只有一个区域,则此方法有效。 但是,当存在多个时,这只给了我一个方块,而该“文本”中包含的每个其他“区域”。 我感觉这将通过负面的展望来解决,但是作为正则表达式的非专业人士,我不知道如何修改以上内容以正确执行。 有人可以帮忙吗?

您可以提前完成此操作:

\[region:(?'link'.*)\](?'text'(?s).*?)\[/region\]

额外的? 使*量词变得懒惰,因此它将匹配尽可能少的字符。 并且(?s)允许点在此位置后与换行符匹配,因此您不必使用(.|[\\r\\n])构造(另一种选择是[\\s\\S] )。

您不需要否定的前瞻,只需将(?'text'(.|[\\r\\n])*)更改为“非贪婪”,以使其与[/region]的第一个实例匹配[/region]而不是最后一个。 您可以通过添加? *之后,因此生成的模式将是:

\[region:(?'link'.*)\](?'text'(.|[\r\n])*?)\[/region\]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM