要匹配出一个必有的条目str_3,和两个肯能没有,也可能有其一或二的条目,str_1,str_2:...(str_1)(str_2)<a>str_3</a>...括号和str_1,str_2同时出现。 能否一次匹配出来,如何做?

解决方案 »

  1.   

    (?<str1>\([^)]*\))?(?<str2>\([^)]*\))?<a>(?<str3>[^<]*)</a>
      

  2.   

    谢谢min_jie,只要str1,str2,不要圆括号,是不是要改一下? 括号之间的问号代表可选是吗?
      

  3.   


    是的。那他们之间总有个什么字符隔开吧,否则怎么分辨出来?
    下面当成是用,号隔开。
    (?:(?<str1>[^,<]*),)?(?<str2>[^<]*)?<a>(?<str3>[^<]*)</a>
      

  4.   


     Regex rr = new Regex(@"\((.*?)\)?\((.*?)\)?<a>(.*?)</a>");
      

  5.   


    我前面没有说清楚,是这样。如果只有一个圆括号,里面就str1;两个的话,就是str1,str2。现在要str1,str2, 不要圆括号怎么做。
     上面的似乎把括号丢了?如果写成
    (?:\((?<str1>[^)]*)\))?
    能匹配出 str1 不?
      

  6.   


    (?:\((?<str1>[^)]*)\))?
    ?:不记录这个捕获组
    \(左括号
    (?<str1>[^)]*)以str1命名的捕获组匹配0个以上非右括号字符
    \)右括号
    ?匹配0或1个整个括号里的内容
      

  7.   


    (? <str1>[^)]*)你指的是这里面的吗?
    <>在这里是成对出现的,(?<命名捕获组>...)
      

  8.   

    有些明白了,刚刚看了命名捕获组.
    其实str1用什么表示都可以吧.