如何使用正则表达式将带有Boost的字符串拆分并在结果列表中包含分隔符?
例如,如果我有字符串“1d2”而我的正则表达式是“[a-z]”我希望结果在带有(1,d,2)的向量中
我有:
std::string expression = "1d2";
boost::regex re("[a-z]");
boost::sregex_token_iterator i (expression.begin (),
expression.end (),
re);
boost::sregex_token_iterator j;
std::vector <std::string> splitResults;
std::copy (i, j, std::back_inserter (splitResults));
由于
答案 0 :(得分:5)
我认为你不能使用boost :: regex直接提取分隔符。但是,您可以提取在字符串中找到正则表达式的位置:
std::string expression = "1a234bc";
boost::regex re("[a-z]");
boost::sregex_iterator i(
expression.begin (),
expression.end (),
re);
boost::sregex_iterator j;
for(; i!=j; ++i) {
std::cout << (*i).position() << " : " << (*i) << std::endl;
}
此示例将显示:
1:a
5:b
6:c
使用此信息,您可以从原始字符串中提取分隔符:
std::string expression = "1a234bc43";
boost::regex re("[a-z]");
boost::sregex_iterator i(
expression.begin (),
expression.end (),
re);
boost::sregex_iterator j;
size_t pos=0;
for(; i!=j;++i) {
std::string pre_delimiter = expression.substr(pos, (*i).position()-pos);
std::cout << pre_delimiter << std::endl;
std::cout << (*i) << std::endl;
pos = (*i).position() + (*i).size();
}
std::string last_delimiter = expression.substr(pos);
std::cout << last_delimiter << std::endl;
此示例将显示:
1
a
234
B'/ P>
C
43
b和c之间有一个空字符串,因为没有分隔符。