【发布时间】:2016-12-03 23:25:30
【问题描述】:
我有一个字符串如下:
{ <object> waves ; big yellow flowers ; slugs ; }
我需要想出一个正确的正则表达式来在第一个空格之后分割它,然后只用分号分割,这样在向量中,它看起来如下:
s.at(0) = <object>
s.at(1) = waves
s.at(2) = big yellow flowers
s.at(3) = slugs
我最接近的只是用分号分隔它,但 <object> 和 wave 最终被读取为一行。
编辑:这是我正在使用的拆分功能
vector<string> split(const string &input, const string ®ex, bool delim = true) {
std::regex re(regex);
std::sregex_token_iterator first, last;
if (delim) {
first = sregex_token_iterator{input.begin(), input.end(), re};
} else {
// the -1 removes the delimiter
first = sregex_token_iterator{input.begin(), input.end(), re, -1};
}
return vector<string>(first, last);
}
【问题讨论】:
-
;之间的元素是否总是以字母/单词字符开头? -
分号的数量是固定的吗?
-
中间的元素;总是以字母或数字开头,分号的数量不固定。我正在处理的其他一些字符串有更多分隔符
-
如果捕获次数未知,您不能使用一个正则表达式来执行此操作。或者至少你必须给我们一个正则表达式迭代器而不是捕获组。
-
我个人不会为此使用正则表达式。使用字符串操作会很简单。