CLR Regex для фракций - PullRequest
       6

CLR Regex для фракций

1 голос
/ 21 октября 2009

Мне нужно регулярное выражение CLR для дробей или целых чисел и дробей, где

1/2 правильно 12 2/3 тоже правильно

и знак минус может появиться перед любым числом.

Сначала я придумал -?([0-9]* )?-?[0-9]+\/-?[0-9]+, но, похоже, он тоже разрешает 2/7 12.

Ответы [ 3 ]

2 голосов
/ 21 октября 2009

Хорошо, это регулярное выражение будет состоять из двух частей: целое число (необязательно):

(:?-?\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", которые не имеют особого смысла.1015 *

ETA: Ваше оригинальное регулярное выражение тоже работает.Ему просто не хватало якорей для начала и конца строки (^ и $ соответственно).Добавление тех заставляет это работать правильно.

1 голос
/ 18 декабря 2010

У меня просто было подобное требование, но я также хотел сопоставить десятичные числа. Я придумал следующее регулярное выражение

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

Или просто так, если вы не хотите именованных групп

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

Чтобы удалить десятичное число из проверки, оно будет сокращено до

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

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 19 августа 2015

попробуйте, только для одной дроби, а не для целого числа

/^\d{1}\/?\d{1}$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...