RegEx для проверки научных записей - PullRequest
1 голос
/ 08 июня 2019

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

Вот шаблон регулярного выражения:

^-?([1-9]{1}|[1-9]?\.[0-9]+)[eE][+\-]?0?[1-9]+0*$

действительных тестовых случаев:

-9.99E+9
9E-1
1e-12
1e12
1e-06
1e-066
1e6000
4.2e06
4.2e-06
4.2e60
.1e12
3.2e23
-4.70e+9
-.2E-4
4e6666
4e6660
4e-6666

неверных тестовых случаев:

37.e88 
1.2e001
10e1
0.0e12
-0.9e2
-9e-0
0e12
9.3e0.2
0e000
1e00009
1e00090
1e000
1
1.000
e112
45e12
0.1e12

но если я попробую в python:

pat = re.compile('^-?([1-9]{1}|[1-9]?\.[0-9]+)[eE][+\-]?0?[1-9]+0*$')
match = re.search(pat, str(4.2e6))

возвращается None. это действительный контрольный пример. Кроме того, 4.2e06, 4.2e666, 4.2e-66 - все допустимые тестовые случаи, но он возвращает None. почему он работает с онлайн-инструментом регулярных выражений, а не с механизмом регулярных выражений python?

Я посмотрел несколько сообщений от stackoverflow и попробовал дать ответы, такие как: pat = re.compile (r '^ [+ -]? (?: 0 | [1-9] \ d *) (?:. \ d *)? (?: [eE] [+ -]? \ d + ) $ ')

Не работает для 4.2e06, 4.2e666, 4.2e-66.

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Я думаю, вам нужно это

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

https://regex101.com/r/oLA3hH/1

0 голосов
/ 08 июня 2019

Просто исправьте поиск по номеру

match = re.search(pat, '4.2e6')
...