C++字符串拆分但转义引号中的所有定界符

标签 c++ regex csv stl

使用 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++) 解决方案,而是一个可以将您推向正确方向的正则表达式。

像这样的正则表达式

("[^"]*"|[^,]*)(?:,|$)

将匹配各个列。 (请注意,它不处理转义引号。)

See it here at regex101 .

关于C++字符串拆分但转义引号中的所有定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739588/

相关文章:

python - Pandas Python 数据帧关联规则的事务 ID 列。

csv - F#处理csv,逐条记录解析

c++ - 如何为 makefile 创建目标

regex - 使用 sed 匹配正则表达式

javascript - node-gyp - 找不到库头文件

正则表达式:检查 `abc`,然后检查 `def`,中间没有 `123`

php - 如何匹配 &lt;iframe&gt; 标签的一部分?

python - 如何修复 ImportError : No module named main. 模型

c++ - 需要帮助从类中调用函数

c++ - 如果enable_if确定T是一个容器,则启用一个结构体?