我有一个需要读入Matrix的csv文件。 现在我有正则表达式
regex pat { R"(("[^"]+")|([^,]+))" }
我在stackoverflow中找到了类似的主题,但是要么使用了不同的正则表达式模式,要么使用了c ++以外的语言。 现在它选择引号之间的序列和非逗号之间的任何序列。该文件包含来自调查的数据,其中有问题,是没有答案。如果您回答“否”,则无需回答某些相关问题。 因此我在文件中得到一些序列:“:,,,,,,,,”每两个逗号表示一个空字段。但我想保持这一行作为一个编号相同的数组。似乎以后导航矩阵以获取信息会更容易。所以我必须在逗号之间提取这些空字段。 我找不到空序列的正则表达式模式。正则表达式是解决这个问题的正确方法吗?
答案 0 :(得分:1)
此代码说明了命名模式的示例用法:
#include <iostream>
#include <iterator>
#include <string>
#include <regex>
int main()
{
std::regex field_regex("(\"([^\"]*)\"|([^,]*))(,|$)");
for (const std::string s : {
"a,,hello,,o",
"\"a\",,\"hello\",,\"o\"",
",,,,"})
{
std::cout << "parsing: " << s << "\n";
std::cout << "======================================" << "\n";
auto i = 0;
for (auto it = std::sregex_iterator(s.begin(), s.end(), field_regex);
it != std::sregex_iterator();
++it, ++i)
{
auto match = *it;
auto extracted = match[2].length() ? match[2].str() : match[3].str();
std::cout << "column[" << i << "]: " << extracted << "\n";
if (match[4].length() == 0)
{
break;
}
}
std::cout << "\n";
}
}
输出:
parsing: a,,hello,,o
======================================
column[0]: a
column[1]:
column[2]: hello
column[3]:
column[4]: o
parsing: "a",,"hello",,"o"
======================================
column[0]: a
column[1]:
column[2]: hello
column[3]:
column[4]: o
parsing: ,,,,
======================================
column[0]:
column[1]:
column[2]:
column[3]:
column[4]: