Planification du développement d'un utilitaire en utilisant boost et regex pour extraire des paires de valeurs clés dans une chaîne.Boost Regex pour l'extraction de paires de valeurs clés
chaîne d'entrée de l'échantillon pourrait être le suivant
Voyage: 1,5, assurance automobile: 3,25
Après extraction devrait ressembler à
Voyage 1,5
assurance automobile 3,25
Demandez le code suivant, mais en quelque sorte cela semble être ne fonctionne pas comme prévu
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];
}
Pourquoi ne pas simplement divisé par ',' ', puis par:'? Sinon, une simple regex telle que '([^:] +): ([^,] +)' suffira, où la première référence arrière est votre clé et la seconde votre valeur. –
merci lindrain, a essayé ([^:] +): ([^,] +) alors nous obtenons des résultats comme 'travel 1.5' et ', assurance automobile 3.25' excepté la première clé toutes les autres touches ont ',' dans eux – Shashi
a essayé de rectifier le problème en utilisant regex "(?: ([^:] +): ([^,] +) [,])", Mais maintenant toutes les paires valeur/clé sont extraites comme prévu pas de fin avec un ',' délimiteur – Shashi