Regex帮助,匹配产生额外的空间

Regex help, match produces extra spaces

本文关键字:空间 帮助 Regex      更新时间:2023-10-16

我正在使用boost/regex.hpp库。正则表达式用于匹配浮点数或任意数学运算符列表中的一个。后面的a是一个占位符,因为当前构造正则表达式的代码在末尾留下了一个|,我还没有修复它。我的正则表达式是:

(?:([-+]?[0-9]*.?[0-9]+(?:[eE][-+]?[0-9]+)?)|(s*sqrt((.+?))s*)|(s*exp((.+?))s*)|(^)|(s*log2((.+?))s*)|(s*log10((.+?))s*)|(s*neg((.+?))s*)|(s*floor((.+?))s*)|(s*log((.+?))s*)|(s*fact((.+?))s*)|(/)|([*])|([+])|([-])|a)

我的测试字符串是:

4.5 + 9.6e8 + sqrt(5)

结果匹配为:

4.5                                          +  9.6e8                                          +    sqrt(5) 5                    

我不知道为什么拍摄之间有这么多空隙。

打印代码为

boost::regex reg(token);
boost::smatch m;
string s = input;
while (boost::regex_search(s, m, reg)) {
    for (int i = 1; i < m.size(); ++i) cout << m[i] << " ";
    s = m.suffix().str();
}

您有很多捕获括号,并且在每个捕获组之间打印一个空格。您的许多捕获组都是空的。也许您想重构正则表达式,只捕获您真正想要的内容。