使用 C++,我想拆分字符串(在本例中为 CSV 文件)的行,其中某些字段可能包含转义的分隔符(使用“”)并且应被视为文字。我查看了已经提出的各种问题,但没有找到我的问题的直接答案。
CSV 文件数据示例:
Header1,Header2,Header3,Header4,Header5
Hello,",,,","world","!,,!,",","
拆分后所需的字符串 vector :
["Hello"],[",,,"],["world"],["!,,!,"],[","]
注意:仅当数据列数等于标题列数时,CSV 文件才有效。
更喜欢非增强/第三方解决方案。效率不是优先事项。
编辑: 下面的代码从@ClasG 实现正则表达式至少满足上面的场景。我正在起草边缘测试用例,但很想知道它何时/何地出现故障...
std::string s = "Hello,\",,,\",\"world\",\"!,,!,\",\",\"\"";
std::string rx_string = "(\"[^\"]*\"|[^,]*)(?:,|$)";
regex e(rx_string);
std::regex_iterator<std::string::iterator> rit ( s.begin(), s.end(), e );
std::regex_iterator<std::string::iterator> rend;
while (rit!=rend)
{
std::cout << rit->str() << std::endl;
++rit;
}
最佳答案
这不是一个完整的 (c++) 解决方案,而是一个可以将您推向正确方向的正则表达式。
像这样的正则表达式
("[^"]*"|[^,]*)(?:,|$)
将匹配各个列。 (请注意,它不处理转义引号。)
关于C++字符串拆分但转义引号中的所有定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739588/