国际双重解析

时间:2016-12-08 12:45:17

标签: parsing boost internationalization boost-spirit boost-spirit-qi

我的文字数字为“25,6 km / h”。我尝试用boost spirit qi解析它。

numeric_value_expression = qi::double_ >> "km" >> -(string("/")) >> "h";

但这仅适用于美国格式的数字,如“25.6 km / h”,而不是逗号。是否有财产或可能解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果你不关心像指数表示法这样的东西,你可以编写自己的解析器:

namespace qi = boost::spirit::qi;

std::string s = "2,123";

double dSpeed = 0.0;

qi::rule<std::string::iterator, double()> fraqDig =
    qi::char_("0-9")[qi::_val = qi::_1 - '0'] >> -(fraqDig[qi::_val += qi::_1 / 10.0]);

qi::rule<std::string::iterator, double()> myFloat =
    qi::int_[qi::_val = qi::_1] >> -(',' >> fraqDig[qi::_val += qi::_1 / 10.0]);

qi::parse(s.begin(), s.end(), myFloat, dSpeed);