![](/img/trans.png)
[英]C++: Splitting a string with multiple delimiters and keep the delimiters in the results?
[英]C++ String splitting but escaping all delimiters in quotations
使用C ++,我想分割字符串的行(在這種情況下為CSV文件),其中某些字段可能包含轉義的定界符(使用“”),應將其視為文字。 我查看了已經提出的各種問題,但沒有找到我問題的直接答案。
CSV文件數據示例:
Header1,Header2,Header3,Header4,Header5
Hello,",,,","world","!,,!,",","
拆分后所需的字符串向量:
["Hello"],[",,,"],["world"],["!,,!,"],[","]
注意:僅當數據列數等於標題列數時,CSV才有效。
希望使用非增強/第三方解決方案。 效率不是重中之重。
編輯:下面的代碼從@ClasG實現regex至少滿足上述情況。 我正在起草邊緣測試用例,但很想聽聽它何時/何處發生故障...
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 ++)解決方案,而是一個正則表達式,可能會在正確的方向推動您。
正則表達式
("[^"]*"|[^,]*)(?:,|$)
將匹配各個列。 (請注意,它不處理轉義引號。)
這不是答案,但是恕我直言。
CSV是一種看似簡單但實際上相當邪惡的存儲格式之一。
您要查找的機器人是Boost.Spirit。
Spirit Master的名稱(在堆棧溢出時)為@sehe。
在這里查看他的答案: https : //stackoverflow.com/a/18366335/2015579
請相信sehe,而不是我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.