Регулярное выражение не соответствует числу с e + или e- - PullRequest
0 голосов
/ 14 июля 2011

Я хочу сопоставить любое число с регулярным выражением. Я написал это выражение (добавлены пробелы для удобства чтения):

( ([0-9]+(\.[0-9]*)?) | (\.[0-9]+) )( (e|E)(\+|\-)[0-9](\.[0-9])? )?

Это должно соответствовать любому числу в одной из следующих форм:

  • 12345
  • 12.345
  • .12345
  • 12345.
  • 12e-345 или 12E-345
  • 12e+345 или 12E+345

Это соответствует первым четырем обозначениям, но последние четыре (те, которые с e- и e +) нет. Что я сделал не так? Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 14 июля 2011

Сосредоточьтесь на этой части выражения:

(e|E)(\+|\-)[0-9](\.[0-9])?

Вы разрешаете только одну цифру после e|E, за которой необязательно следует . и одну другая цифра.

1 голос
/ 14 июля 2011

Вы ищете 1 цифру после [eE]. Изменить ? до +

( ([0-9]+(\.[0-9]*)?) | (\.[0-9]+) )( (e|E)(\+|\-)[0-9]+(\.[0-9])+ )?
1 голос
/ 14 июля 2011

Может быть, это последняя косая черта '\.'.

Кроме того, нет *, поэтому в показателе степени допускаются только одна или две цифры.

(\.[0-9])? )?
0 голосов
/ 14 июля 2011

Используйте это: \d+[eE][+-]\d+|\d+\.?\d*|\.\d+

0 голосов
/ 14 июля 2011

Поскольку регулярное выражение соответствует числам вида 12.34e+4.5. Часть [0-9](\.[0-9])? должна быть изменена на [0-9]+.

( ([0-9]+(\.[0-9]*)?) | (\.[0-9]+) )( (e|E)(\+|\-)[0-9]+ )?

См. Также Как определить число с плавающей запятой с помощью регулярного выражения .

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