[英]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.