C++ 用于提取键值对的Boost正则表达式
计划开发一个实用程序,使用boost和regex提取字符串中的键值对 示例输入字符串可以如下所示 旅行:1.5,汽车保险:3.25 拔牙后应该是什么样子 旅行1.5 汽车保险3.25 有下面的代码,但不知何故,这似乎不是预期的工作C++ 用于提取键值对的Boost正则表达式,c++,regex,boost,C++,Regex,Boost,计划开发一个实用程序,使用boost和regex提取字符串中的键值对 示例输入字符串可以如下所示 旅行:1.5,汽车保险:3.25 拔牙后应该是什么样子 旅行1.5 汽车保险3.25 有下面的代码,但不知何故,这似乎不是预期的工作 std::map<std::string, std::string> pairs; boost::regex re("(?:(.*?):(.*?),)*(?:(.*?):(.*?))$"); // key - value pair // rea
std::map<std::string, std::string> pairs;
boost::regex re("(?:(.*?):(.*?),)*(?:(.*?):(.*?))$"); // key - value pair
// read lines from stdin; populate map
boost::sregex_iterator it(str.begin(), str.end(), re), end;
for ( ; it != end; ++it){
pairs[(*it)[1]] = (*it)[2];
}
std::映射对;
boost::regex re((?:(.*):(.*))*(?:(.*):(.*))$”;//键值对
//从标准文本中读取行;填充地图
sregex_迭代器it(str.begin(),str.end(),re),end;
for(;it!=end;++it){
配对[(*it)[1]]=(*it)[2];
}
这真的不应该那么难。你已经得到了大部分答案,只是处理最后一个逗号的问题<代码>(:,|$)应该可以很好地工作
(?:([^:]+):([^,]+)(?:,|$)+
为什么不先按,
拆分,然后按:
拆分?否则,一个简单的正则表达式,如([^:]+):([^,]+)
就足够了,其中第一个反向引用是您的键,第二个是您的值。感谢lindrain,尝试了([^:]+):([^,]+)然后我们得到了类似于“旅行1.5”和“汽车保险3.25”的结果,除了第一个键之外,所有其他键都有',尝试使用正则表达式来纠正问题(?:([^:]+:([^,]+)[,])”,但现在所有键值都按预期提取,但对于最后一个不以“,”分隔符结尾的键值对,则必须向其中一个表达式添加可选逗号。如果使用([^:]+):([^,]+),?则它将在键值列表的末尾使用冗余逗号进行匹配,这可能被视为一个功能。