正则表达式匹配父模式

本文关键字:模式 正则表达式 | 更新日期: 2023-09-27 18:37:07

我有这个字符串:

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#>

如何修改正则表达式?

正则表达式匹配父模式

你来了,

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

演示

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

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

演示