我需要一个CLR Regex用于分数或整数和分数
1/2
是正确的
12 2/3
也是正确的
和减号可以在任何数字之前弹出。
我首先提出了-?([0-9]* )?-?[0-9]+\/-?[0-9]+
,但这似乎也允许2/7 12
。
答案 0 :(得分:2)
那么,正则表达式将分为两部分,(可选)整数:
(:?-?\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"
这样的事情没有多大意义。
ETA:您的原始正则表达式也适用。它只是缺少字符串开头和结尾的锚点(分别为^
和$
)。添加它们可以使它正常工作。
答案 1 :(得分:1)
我只是有类似的要求,但我也希望匹配十进制数字。 我想出了以下正则表达式
^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$
如果您不想要命名组
,或者只是这个^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$
要从验证中删除十进制数,它将缩短为
^-?\d+((/\d+)|(\s\d+/\d+))?$
希望这有助于某人!
答案 2 :(得分:0)
试试这个,仅针对单个分数而不是整数
/^\d{1}\/?\d{1}$/