C++14如何使用正则表达式从指定格式字符串中提取三个变量
C++14 正则提取实现方案
正确正则表达式
^([A-Z])->([A-Z]),([0-9]+)$
^匹配字符串起始位置,避免前缀冗余内容干扰匹配([A-Z])第一个捕获组,匹配单个大写英文字母->匹配固定分隔符([A-Z])第二个捕获组,匹配第二个单个大写英文字母,匹配逗号分隔符([0-9]+)第三个捕获组,匹配1位及以上的数字$匹配字符串结束位置,避免后缀冗余内容干扰匹配
完整代码示例
#include <iostream> #include <string> #include <regex> int main() { std::string target = "A->B,100"; // 使用原始字符串字面量避免转义反斜杠,C++11及以上版本均支持 std::regex pattern(R"(^([A-Z])->([A-Z]),([0-9]+)$)"); std::smatch match_result; if (std::regex_match(target, match_result, pattern)) { // 第0个匹配项为完整匹配的字符串,从索引1开始对应三个捕获组内容 std::string first_char = match_result[1].str(); std::string second_char = match_result[2].str(); std::string num_str = match_result[3].str(); // 数字可按需转成整型:int num = std::stoi(num_str); 长整型用std::stoll // 测试输出 std::cout << "第一个字母:" << first_char << std::endl; std::cout << "第二个字母:" << second_char << std::endl; std::cout << "数字:" << num_str << std::endl; } else { std::cout << "字符串格式不符合要求" << std::endl; } return 0; }
扩展说明
- 如果要提取的目标格式是大文本中的子段,删掉正则首尾的
^和$,改用std::regex_search接口即可 - 数字部分如果允许负数,可以把
[0-9]+修改为-?[0-9]+
内容的提问来源于stack exchange,提问作者demid
相关产品推荐
相关产品推荐

