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