Как захватить числа в определенном диапазоне с плавающей запятой? - PullRequest
1 голос
/ 26 марта 2019

Вопрос прямой.У меня есть несколько чисел, и я пытаюсь сопоставить числа в диапазоне от 0 до 110. Допустим, у нас есть пять чисел:

99,9

108.712718

110

110.2

9

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

PS Я делаю это с Python.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Это должно быть разделено на три части.
1) 110
2) 100-109.9999999 ...
3) 0-99.9999999 ...

шаблон: ^(?:(?:10[0-9]|[0-9][0-9]?)(?:\.[0-9]+)?|110)$

^ начало строки
(?: начать группу без захвата
(?:10[0-9]|[0-9][0-9]?) Захват 100-109 или 00-99
(?:\.[0-9]+)? Захватывает десятичную точку и цифры после нее 0 или 1 раз
| или
110 захват 110 буквально
) конец группы без захвата
$ конец строки

Simples. Вопросы?

edit: в качестве запоздалой мысли, если вы не хотите, чтобы начальные нули (например, 00, 01, 02 и т. Д.), Вы могли бы слегка изменить шаблон на что-то вроде ^(?:(?:10[0-9]|[1-9]?[0-9])(?:\.[0-9]+)?|110)$ с изменением [1-9]?[0-9] вместо [0-9][0-9]?

1 голос
/ 26 марта 2019

Примерно так должно работать:

(?<!\.)\b0*(?:(?:\d\d?|10\d)(?:\.\d+)?|110(?:\.0+)?)\b(?!\.\d)
  • (?<!\.) означает «не предшествует точка (\.
  • \b является границей слова
  • 0* означает «предшествует ноль или более 0»
  • (\d\d?|10\d) означает «одна цифра, за которой следует другая необязательная цифра (\d\d?) или 10, за которой следует любая цифра»
  • затем необязательная «точка и одна или несколько цифр» ((\.\d+)?)
  • последние две точки в "или" с простым числом 110 с одним или несколькими 0 после точки ((?:\.0+)?)
  • еще одна граница слова для соответствия концу числа
  • и, наконец, (?!\.\d), что означает "не сопровождается точкой и цифрой"

См. здесь демо.

P.S. Если вы соответствуете соответствию всей строки, отрицательный взгляд вперед и взгляд назад бесполезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...