C++ regex exclusion double quotes not working

后端 未结 2 797
渐次进展
渐次进展 2021-01-25 00:32

I am considering input files with lines like

\"20170103\",\"MW JANE DOE\",\"NL01 INGB 1234 5678 90\",\"NL02 INGB 1234 5678 90\",\"GT\",\"Af\",\"12,34\",\"Interne         


        
2条回答
  •  星月不相逢
    2021-01-25 01:23

    As others have said, regex_iterator::operator-> returns a match_results and match_results::str is defaulted to 0:

    The first sub_match (index 0) contained in a match_result always represents the full match within a target sequence made by a regex, and subsequent sub_matches represent sub-expression matches corresponding in sequence to the left parenthesis delimiting the sub-expression in the regex

    So the problem with your code is you're not using linePart = it->str(1).

    A better solution would be to use a regex_token_iterator. With whitch you could just use your re to directly initialize lineParts:

    vector lineParts { sregex_token_iterator(cbegin(line), cend(line), re, 1), sregex_tokent_iterator() };
    

    But I'd just like to point out that c++14 introduced quoted does exactly what you're trying to do here, and more (it even handles escaped quotes for you!) It'd just be a shame not to use it.

    You probably are already getting your input from a stream, but just in the case you're not you'd need to initialize an istringstream, for the purposes of example I'll call mine: line. Then you can use quoted to populate lineParts like this:

    for(string linePart; line >> quoted(linePart); line.ignore(numeric_limits::max(), ',')) {
        lineParts.push_back(linePart);
    }
    

    Live Example

提交回复
热议问题