Номер матча не заканчивается 0 - PullRequest
1 голос
/ 06 марта 2019

Я сопоставляю целые и дробные числа по следующей схеме:

(0 | [1-9] [0-9] *) (. [0-9] +)?

Это соответствует, например, числам:

0
1
12
12.1
12.12

Но это также соответствует:

0.0
0.00
1.00
1.10

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

Ответы [ 3 ]

2 голосов
/ 06 марта 2019

Ваш шаблон (0|[1-9][0-9]*)(.[0-9]+)? соответствует всем примерам, потому что вторая часть (.[0-9]+)? не учитывает, что последнее совпадение должно быть 1-9. Обратите внимание, что вы должны экранировать точку \., чтобы буквально соответствовать ей.

Вы можете обновить вторую часть вашего паттерна так, чтобы она соответствовала 0+ раз [0-9]* и убедиться, что совпадение заканчивается на [1-9]:

^(0|[1-9][0-9]*)(\.[0-9]*[1-9])?$

Regex demo

Шаблон соответствует:

  • ^ Начало строки
  • (0|[1-9][0-9]*) Группа захвата, соответствует 0 или 1, затем 0+ раз 0-9
  • ( Дополнительная группа захвата для соответствия
    • \.[0-9]*[1-9] Совпадение ., затем 0+ раз 0-9, затем 1-9
  • )? Закрыть группу
  • $ Конец строки

Если вы, например, не обращаетесь к группам захвата для дальнейшей обработки, вы можете вместо этого сделать их не захватывающими (?:.

0 голосов
/ 06 марта 2019

Мое предложение по этой проблеме:

^\d+$|[0-9.]*?[1-9]$

Требования, которые должны быть выполнены:

  • Совпадение целых чисел
  • Совпадение чисел с плавающей запятой, не заканчивающихся на 0
0 голосов
/ 06 марта 2019

Вы можете использовать следующее регулярное выражение:

^(0|[1-9][0-9]*)(.(?:[0-9]+[1-9]|[1-9]))?$

demo: https://regex101.com/r/ZtRg49/5

Это не будет соответствовать всем следующим элементам:

0.0
0.00
1.00
1.10

ЕслиВы хотите разрешить частичные совпадения (не принимая во внимание окончание 0), вы можете использовать:

^(0|[1-9][0-9]*)(.(?:[0-9]+[1-9]|[1-9]))?

demo https://regex101.com/r/ZtRg49/4/

Пояснения:

  • Я добавил ограничение, что после . есть одна цифра [1-9] или несколько цифр, которые могут содержать 0, за которыми следует ненулевая цифра [1-9].
  • Удаляя конечную привязку $, вы включаете частичные совпадения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...