正则表达式匹配父模式

时间:2015-01-12 09:59:30

标签: c# regex

我有这个字符串:

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

我需要Regex模式来查找这个标签列表(只有父标签!):

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

如何修改正则表达式?

2 个答案:

答案 0 :(得分:1)

你走了,

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

DEMO

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

答案 1 :(得分:0)

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

Demo