匹配可选的捕获组

时间:2012-10-08 04:43:56

标签: .net regex

我想匹配一个xml元素并为可选属性创建一个组。如果该属性不存在,那么我将执行一些其他操作。例如我有

<customer display="no">

我想匹配customer元素,但display属性可能不存在。在代码中,我将检查该捕获组是否为空,如果是,则执行一些自定义逻辑。

所以正则表达式是

<customer.*(display="yes|no").*?>

当元素具有属性时匹配元素ok但是如何使组可选,以便我可以检查元素是否包含在内?

2 个答案:

答案 0 :(得分:1)

您可以在组后添加问号,与正则表达式的任何其他可选组件相同。如果你这样做,你还必须使第一个.*懒惰(通过添加?),否则它将消耗整行。

所以你应该有这样的东西:

<customer.*?(display="yes|no")?.*?>

另请注意,(display="yes|no")可能与您的要求不符:它与display="yesno" 匹配 display="yes"或{ {1}}。我怀疑你想要display="no"

答案 1 :(得分:0)

试试这个正则表达式:

<customer.*?(display="(?:yes|no)").*?>

解释

  

?

     

匹配前一个元素零次或一次。

     

*?

     

匹配前一个元素零次或多次,但次数尽可能少。

     

(?: subexpression)

     

定义非捕获组。