You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++正则表达式无法匹配空格后字符的问题求助

结构化字符串拆分及含空格name值提取问题

问题

需要把类似{[data1]name=NAME1}{[data2]name=NAME2}的字符串拆成两个独立的{[dataX]name=XXX}单元,同时正确提取name=后的完整值——但当name值带空格时(比如{[data1]name=NAME 1}{[data2]name=NAME 2}),当前正则处理只能拿到NAME,空格后面的内容会丢失。

当前代码

std::string stdstrData = "{[data1]name=NAME1}{[data2]name=NAME2}";
std::vector<std::string> commandSplitUnderScore;
std::regex re("\\}");
std::sregex_token_iterator iter(stdstrData.begin(), stdstrData.end(), re, -1);
std::sregex_token_iterator end;

while (iter != end) {
    if (iter->length()) {
        commandSplitUnderScore.push_back(*iter);
    }
    ++iter;
}

for (auto& str : commandSplitUnderScore) {
    std::cout << str << std::endl;
}

问题原因

你当前只用}做分隔符拆分,得到的是缺少闭合}的片段(比如{[data1]name=NAME 1);如果后续提取name值时用了匹配非空格字符的正则(比如name=(\S+)),自然会在空格处截断内容。

解决办法

直接用正则匹配完整的单元结构,同时确保name=后的内容能匹配到所有非}的字符(包括空格)。

修正后的代码

#include <iostream>
#include <string>
#include <vector>
#include <regex>

int main() {
    std::string stdstrData = "{[data1]name=NAME 1}{[data2]name=NAME 2}";
    std::vector<std::string> splitUnits;
    
    // 匹配完整的{[dataX]name=XXX}单元,确保包含所有内容直到闭合}
    std::regex unitRegex(R"(\{(\[data\d+\]name=[^}]+)\})");
    std::sregex_iterator iter(stdstrData.begin(), stdstrData.end(), unitRegex);
    std::sregex_iterator end;

    // 收集所有完整单元
    while (iter != end) {
        splitUnits.push_back((*iter)[0]); // (*iter)[0]是整个匹配的单元
        ++iter;
    }

    // 输出拆分后的单元
    std::cout << "拆分后的单元:" << std::endl;
    for (auto& unit : splitUnits) {
        std::cout << unit << std::endl;
    }

    // 如果需要提取每个单元里的name值
    std::regex nameRegex(R"(name=([^}]+))");
    std::cout << "\n提取的name值:" << std::endl;
    for (auto& unit : splitUnits) {
        std::smatch match;
        if (std::regex_search(unit, match, nameRegex)) {
            std::cout << match[1] << std::endl;
        }
    }

    return 0;
}

关键说明

  • [^}]+是核心:匹配任意非}的字符,不管有没有空格,都会一直匹配到单元末尾的},确保拿到完整的name值
  • 用std::sregex_iterator直接遍历所有完整单元,比按分隔符拆分更可靠,不会丢失闭合}

内容的提问来源于stack exchange,提问作者Summit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:54:21