Регулярное выражение для сопоставления процента с десятичным числом?

Я пытаюсь создать регулярное выражение (.NET), чтобы соответствовать проценту с 4 знаками после запятой. 4 знака после запятой обязательны. Ассортимент выглядит так:

0.0001 to 100.0000 

До сих пор я придумал:

(?:[^0]+[1-100]{1,3})\.(?:\d{4})

Однако я немного не уверен, как добавить несколько других требований к этому выражению. Я нуждаюсь:

  • Без начальных нулей перед запятой. 42.4214 разрешено, 042.4214 - нет. 1.0000 разрешено, а 001.0000 — нет. И т.д..
  • Допускается до 3 символов перед десятичным числом без начальных нулей.
  • Если число перед запятой равно 100, не допускайте, чтобы число после запятой было чем-либо другим, кроме 0000, поэтому 100,0000 разрешено, но 100,0135 не разрешено. (Возможно ли это даже с регулярным выражением?)

Помощь приветствуется!


person rage8885    schedule 27.08.2012    source источник


Ответы (3)


Просто рассматривайте возможность 100.0000 как отдельный случай. Легко сопоставить это (100\.0000) и легко сопоставить остальные ([1-9]?\d\.\d{4}), поэтому с двумя альтернативами вы получите:

^(100\.0000|[1-9]?\d\.\d{4})$

(Предполагая, что вы хотите, чтобы это был весь текст, в противном случае пропустите ^ и $.

person Jon Hanna    schedule 27.08.2012

Я бы сделал что-то вроде этого:

^((([0-9]|[1-9]\d)\.\d{4})|100\.0000)$

Подтверждение

person Daniel Hilgarth    schedule 27.08.2012
comment
Также отлично, хотелось бы отметить два ответа как правильные. Это, безусловно, немного помогает моему пониманию — видеть, как это делается двумя разными способами. Благодарю вас! - person rage8885; 27.08.2012
comment
@DanielHilgarth Хорошо, я пропустил требование. - person mmdemirbas; 27.08.2012

Посмотрите в действии:

^(0|[1-9]\d?)\.\d{4}|100\.0000$

Матчи:

0.0001
100.0000
42.4214
1.0000

Не соответствует:

100.0135
042.4214
001.0000
000.0000
1000.0000
2000.0000
300.0000
person mmdemirbas    schedule 27.08.2012
comment
Почему вы вообще хотите соответствовать 300? диапазон от 0,0001 до 100,0000 - person Hugo Dozois; 27.08.2012
comment
Выглядит хорошо, за исключением того, что диапазон составляет от 0,0001 до 100,0000, как уже упоминалось другими. Я ценю ссылку на этот тестер регулярных выражений, который намного лучше, чем собранное вместе приложение C #, которое я написал. Я почти хочу сделать эту штуку своей домашней страницей. - person rage8885; 27.08.2012
comment
Я забыл про диапазон. Исправлена. - person mmdemirbas; 27.08.2012