如何使用正则表达式将输入数字格式化为字符串?

时间:2019-06-06 07:34:37

标签: c++ regex

我想将数字输入作为字符串,然后去除冗余零。我已经使用子字符串完成了此操作,但想知道是否有一种使用正则表达式的方法。例如,用正则表达式替换。

我仅使用正则表达式检查字符串是否为有效数字。我反复使用子字符串和if条件。我希望能够使用正则表达式将“ 0012340.3200E6”转换为“ 12340.32E6”。

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

1 个答案:

答案 0 :(得分:0)

最好将数字转换为浮点数,然后使用字符串格式,即使用

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:]]