正则表达式匹配父模式

Regex matching parent pattern

我有这个字符串:

string result = "User operation: <#user#>  Computer: <#computername#> Description: <#TemplateDescription(<#user#>)#>"

我需要正则表达式模式来查找此标签列表(仅父标签!):

<#user#>
<#computername#>
<#TemplateDescription(<#user#>)#>

我目前正在使用以下正则表达式:

List<string>    loTags  =   Regex.Matches(result, "<#(.*?)#>")
                                 .Cast<Match>()
                                 .Select(loTag => string.Format("<#{0}#>",
                                                                loTag.Groups[1].Value))
                                 .ToList();

结果是这样的:

<#user#>
<#computername#>
<#TemplateDescription(<#user#>

如何修改我的正则表达式?

将您的正则表达式更改为 "<#(.*?)#>([)](#>))?" 以匹配并检索可选的右括号以及末尾所需的模式。

Demo

给你,

@"<#((?:<#.*?#>|(?!<#|#>).)*)#>"

DEMO

<#.*?#> 匹配所有 <# #> 块。如果出现除此以外的任何字符,则使用 | OR 运算符旁边的模式。在我们的例子中,它是 (?!<#|#>).,它匹配任何字符,但不匹配 <##>