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