逗号分隔的正则表达式,除非逗号在括号内

时间:2017-01-15 16:33:44

标签: c++ regex comma

我需要将这样的字符串分开:

cat, dog , ant( elephant, lion(tiger)), bird

进入这个:

cat
dog
ant( elephant, lion(tiger))
bird

我目前的状态是:(\w+)(,\s*)*,但这也将大象,狮子和老虎分开。此外,还保留了一些逗号和空格。

您可能已经猜到,我将在ant(...)字符串中再次调用相同的表达式。如果重要的话,我将在c ++中使用它。

1 个答案:

答案 0 :(得分:3)

This regex

(\w+\(.+\))|\w+

将解析

cat, dog , ant( elephant, lion(tiger)), bird

分为:

cat
dog
ant( elephant, lion(tiger))
bird

完整计划:

#include <string>
#include <vector>
#include <iterator>
#include <regex>
#include <iostream>

int main()
{
    std::string str{R"(cat, dog , ant( elephant, lion(tiger)), bird)"};
    std::regex r{R"((\w+\(.+\))|\w+)"};

    std::vector<std::string> result{};
    auto it = std::sregex_iterator(str.begin(), str.end(), r);
    auto end = std::sregex_iterator();
    for(; it != end; ++it) {
        auto match = *it;
        result.push_back(match[0].str());
    }
    std::cout << "Input string: " << str << '\n';
    std::cout << "Result:\n";
    for(auto i : result)
        std::cout << i << '\n';
}

live demo