Как извлечь данные из строки с помощью std::regex?
Есть строка вида
VariableName VariableValue
Где
VariableName- имя параметра, строка символов без пробеловVariableValue- значение параметра, строка символов без пробелов
Строки разделены одним или более пробелами, в начале и в конце строки может содержаться произвольное количество пробельных символов.
Каким образом с помощью std::regex можно задавая VariableName получать из строки VariableValue?
Ответы (2 шт):
Автор решения: IL99progC
→ Ссылка
Вероятно, вам потребуется regex_search описание функции Тут пример пример использования функции Попробовать как работают все эти функции по работе со строками можно тут тестер регулярных выражений онлайн
Автор решения: Максим
→ Ссылка
Нужно использовать std::regex_match
#include <string>
#include <regex>
#include <iostream>
#include <sstream>
std::string getValue(std::string const& data, std::string const& variableName) {
std::string variableValue;
const std::regex pattern{R"(^[[:blank:]]*)" + variableName + R"([ ]+(\w+)\s*$)"};
std::smatch match;
if (std::regex_match(data, match, pattern) and match.size() >= 2) {
variableValue = match[1];
};
return variableValue;
}
int main() {
std::stringstream test_data("Var1 Val1\n\n\n\nVar2 Val2\n Var3 Val3\n Var4 Val4 \n Var5 Val5 \n");
std::string var_name_list[] = {"Var1", "Var2", "Var3", "Var4"};
for (std::string line; std::getline(test_data, line);) {
for (auto name: var_name_list) {
auto r = getValue(line, name);
if (not r.empty()) {
std::cout << name << " " << r << std::endl;
break;
}
}
}
return 0;
}