在.NET

时间:2015-10-04 06:17:57

标签: regex

private static Regex regex_Unsigned_Integer = new Regex("^(([0-9]{1})|([1-9][0-9]+))$");
private static Regex regex_Signed_Integer = new Regex("^([+|-]?)(([0-9]{1})|([1-9][0-9]+))$");
private static Regex regex_Unsigned_Factor = new Regex("^(([0-9]+[/][1-9]{1}[0-9]*)|([1-9]{1}[0-9]*['][1-9]+[/][1-9]{1}[0-9]*))$");
private static Regex regex_Signed_Factor = new Regex("^([+|-]?)(([0-9]+[/][1-9]{1}[0-9]*)|([1-9]{1}[0-9]*['][1-9]+[/][1-9]{1}[0-9]*))$");
private static Regex regex_Unsigned_Decimal = new Regex("^((([0-9]{1})|([1-9]{1}[0-9]+))[.][0-9]+)$");
private static Regex regex_Signed_Decimal = new Regex("^([+|-]?)((([0-9]{1})|([1-9]{1}[0-9]+))[.][0-9]+)$");
  1. 我想将一些数字与正则表达式匹配,例如(-1),( - 1.3),1'3 / 7,(+ 3),3;
  2. 但是,它包含一个特殊情况,只有带符号的数字应该用括号包围;
  3. Illegde string:(3), - 3,+ 1'3 / 7
  4. 纠正字符串:3,( - 3),(+ 1'3 / 7)
  5. 因此,我必须在.NET中构建6个Regex:
  6. 正则表达式是否包含一些规则,以匹配只有带符号的数字应该用括号括起来的条件。

  7. THX

1 个答案:

答案 0 :(得分:0)

你不需要 6个正则表达式,所有这些都可以放在一个正则表中:

^(?:
  (?<sign>\([-+])?
    (?:[0-9]+')?
    [0-9]+(?:.[0-9]+)?
    (?:/[0-9]+(?:.[0-9]+)?)?
  (?(sign)\))
)$

Demo

您要求的部分是:

  • 在可选的命名组中抓取(后跟+-

    (?<sign>\([-+])?
    
  • 匹配数字:它是正则表达式的中间部分

  • 如果sign组匹配,则匹配)

    (?(sign)\))
    

    这是您正在寻找的条件正则表达式运算符:

    (?(groupName)thenExpression|elseExpression)
    

    |elseExpression部分是可选的。