代码之家  ›  专栏  ›  技术社区  ›  Peter Booster

分数的clr regex

  •  1
  • Peter Booster  · 技术社区  · 15 年前

    我需要一个clr regex来表示分数或整数和分数,其中

    1/2 是正确的 12 2/3 也是正确的

    负号可以在任何数字之前弹出。

    我第一次想到 -?([0-9]* )?-?[0-9]+\/-?[0-9]+ 但这似乎允许 2/7 12 比如说。

    3 回复  |  直到 8 年前
        1
  •  2
  •   Joey    15 年前

    好吧,这个regex分为两部分,(可选)整数:

    (:?-?\d+ )?
    

    分数部分:

    -?\d+/-?\d+
    

    我们需要匹配完整的字符串;所以:

    ^(:?-?\d+ )?-?\d+/-?\d+$
    

    测试:

    PS> $re=[regex]'^(:?-?\d+ )?-?\d+/-?\d+$'
    PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{$_ -match $re} | gu
    True
    

    然而,这允许 "-12 -2/-3" 或者类似的事情 "1 -1/2" 这没什么意义。

    埃塔: 你原来的雷杰克斯作品,也。它只是缺少用于开始和结束的锚( ^ $ ,分别)。添加这些可以使其正常工作。

        2
  •  1
  •   CaffGeek    14 年前

    我有一个类似的要求,但我也想匹配十进制数。 我想出了下面的正则表达式

    ^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$
    

    或者如果你不想要命名的组

    ^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$
    

    要从验证中删除十进制数,它将被缩短为

    ^-?\d+((/\d+)|(\s\d+/\d+))?$
    

    希望这能帮助别人!

        3
  •  0
  •   Jeff    8 年前

    试试这个,只对一个分数而不是整数

    /^\d{1}\/?\d{1}$/