Парсинг парных строк - PullRequest
       11

Парсинг парных строк

1 голос
/ 01 марта 2012

Этот вопрос является продолжением этого вопроса . Проблема в том, что регулярное выражение "[-+]?\\d*\\.?\\d+([eE][-+]?\\d+)?" неправильно находит дубликаты.

Например, вход sdf9.99e.23 не содержит двойных чисел, потому что если у нас есть [eE], после него ДОЛЖНО быть [+ -] или просто [0-9].

Так что мне нужно какое-то "если" в регулярном выражении. В псевдокоде это будет выглядеть так: if(char[i]==(e|E)) then if(char[i+1] == ('+'|'-')) else return null.

1 Ответ

0 голосов
/ 02 марта 2012

Использование телепатии (ожидание) для расширения вашего алгоритма и запрета использования цифр, точек, не цифр в качестве числа. Я могу предложить эти 3 регулярных выражения.Используйте их последовательно для одной и той же строки и объедините (concat, append) результаты.

"[+-]?\\d+((?![\d.])|$)" // ±digits w/o dot after them (actually, this is integer)
"[+-]?\\d+\\.\\d+((?![\deE])|$)" // ±digits, dot, digit w/o [eE] after them
"[+-]?\\d+\\.\\d+[eE][+-]?\\d+" // full variant: ±digits, dot, digits, "e", ±digits

Я пробовал использовать какой-то подход для объединения этого в одно регулярное выражение, но, к сожалению, это не работает.

...