ASD~12(RT) FRT~13(WR) TTY~14型如以上的格式,也就是说括号即括号中部分可有可无,我写如下正则表达式,
判断一个字符串是否符合这种格式,如下:Regex r = new Regex(@"^([A-Za-z0-9]{0,9}\~\d{1,3}(?'bracket'\()(?(bracket)(\w{1,10}\)\s*)|(\s*)))+$")
 请问有何错误?都加上括号则可以,去掉其中的一些括号部分则不行请高人指点!!!

解决方案 »

  1.   

    ^([A-Za-z0-9]{0,9}(?:\~\d{1,3}(?:\(\w{1,10}\)){0,1}\w*\s*)+)$
    这样试下...
      

  2.   

    ASD~12(RT) FRT~13(WR) TTY~14 try it like this , Regex r = new Regex(@"[a-z]+?(\~\d{1,3}(?:\([a-z]{1,}\))[a-z]*?)*?", RegexOptions.IgnoreCase);
      

  3.   


    smbeng的做法果然巧妙,将括号及括号中的部分当作一个整体来处理。可是像我上面那种笨方法,错又在哪里呢??
      

  4.   

    你方法也是好的...
    ^([A-Za-z0-9]{0,9}\~\d{1,3}(?:(\(\w{1,10}\)\s*)|(\s*)))+$
    相当于把
    (?'bracket'\()这一组提到后括号的同一个分组内..TTY~14 它不存在(,它就不存在'bracket'了...