正则表达式帮助,匹配产生额外的空格
Regex help, match produces extra spaces
我正在使用 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();
}
您有很多捕获括号,并且在每个捕获组之间打印 space。您的许多捕获组都是空的。也许您想重构您的正则表达式以仅捕获您真正想要的内容。
我正在使用 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();
}
您有很多捕获括号,并且在每个捕获组之间打印 space。您的许多捕获组都是空的。也许您想重构您的正则表达式以仅捕获您真正想要的内容。