簡體   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