Регулярное выражение для соответствия научной записи чисел, но не других букв - PullRequest
0 голосов
/ 25 мая 2018

Я хочу написать регулярное выражение для сопоставления всех положительных двойных чисел с максимум 2 цифрами после десятичной точки.

Мой первый подход был такой:

^\\d+(?:\\.\\d{1,2})?$

в большинстве случаев работает нормальноно не для научных обозначений, например 10000000, когда оно написано как 1.0E7.

. Я нашел ответ здесь и адаптировал его к своему случаю, получив в результате:

[\\s=]+([+]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d{1,2}))$

но теперь он возвращает ложь для большого количества "хороших" значений.

Любая идея, как сделать так, чтобы он совпадал только с положительными числовыми значениями с 0 до 2 цифрами после десятичной точки, но такженаучная запись чисел?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Предполагая, что ноль не является положительным числом, вы можете использовать

^(?:0\.(?:0[1-9]|[1-9]\d?)|[1-9]\d*(?:\.\d{1,2})?)(?:e[+-]?\d+)?$

, где

  • (?:0\.(?:0[1-9]|[1-9]\d?) соответствует положительному числу, меньшему 1, с максимум 2 знаками после запятой
  • [1-9]\d*(?:\.\d{1,2})? соответствует положительному числу, равному или большему 1, с необязательными до 2 десятичных знаков
  • (?:e[+-]?\d+)? необязательно соответствует научной нотации

Предостережения:

  • запрещены начальные нули
  • нет . без разрешенных десятичных разрядов (можно исправить с помощью \.\d{0,2})
  • возможно большее количество десятичных разрядов из-заe-нотация (например, 1e-3)
  • i-Modifier следует использовать
  • , вы можете просто использовать свои языковые возможности для анализа и сравнения значений с плавающей запятой

Демо: https://regex101.com/r/ljOaIb/1/

0 голосов
/ 25 мая 2018

Вы скопировали точное регулярное выражение из другого ответа, в котором запрашивались дополнительные требования, например уравнение соответствия.Чтобы удалить те с небольшой модификацией, вы можете попробовать:

^[+-]?\d+(?:\.\d*(?:[eE][+-]?\d+)?)?$

Демо-версия

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