Как использовать регулярные выражения для форматирования входного числа в виде строки? - PullRequest
0 голосов
/ 06 июня 2019

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

Я использую регулярное выражение только для проверки, является ли строка допустимым числом или нет. Я использую подстроку и если условия неоднократно для зачистки. Я хочу иметь возможность преобразовать сказать: «0012340.3200E6» в «12340.32E6» с помощью регулярных выражений.

rr("((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?((e|E)((\\+|-)?)[[:digit:]]+)?");

1 Ответ

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

Было бы гораздо лучше преобразовать число в число с плавающей точкой, а затем использовать форматирование строки, т. Е. Использовать

char buffer [50];
sprintf(buffer, "%E", ...)
)

или spritnf(buffer, "%fE%d", ..., ...), если для каких-либо действий это будет работать лучше.


В любом случае, регулярное выражение должно выглядеть примерно так:

([+-]?)0*(\d+)(?:(\.\d*[1-9])|\.)0*(?:([Ee][+-]?)0*(\d+))?

(см. regex101.com ), и тогда шаблон замещения будет

$1$2$3$4$5

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

Осталось выйти из вышеприведенного выражения и разобраться с \d для цифр - я видел, что вы используете [[:digit:]] вместо.

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