簡體   English   中英

C ++字符串拆分,但在引號中轉義所有定界符

[英]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 ++)解決方案,而是一個正則表達式,可能會在正確的方向推動您。

正則表達式

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

將匹配各個列。 (請注意,它不處理轉義引號。)

在regex101上看到它

這不是答案,但是恕我直言。

CSV是一種看似簡單但實際上相當邪惡的存儲格式之一。

您要查找的機器人是Boost.Spirit。

Spirit Master的名稱(在堆棧溢出時)為@sehe。

在這里查看他的答案: https : //stackoverflow.com/a/18366335/2015579

請相信sehe,而不是我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM