我想知道是否有一个方法使用boost :: split来分割一个字符串,使用整个字符串作为分隔符。例如:
str =“xxaxxxxabcxxxxbxxxcxxx”
有没有一种方法可以使用“abc”作为分隔符来分割这个字符串?因此返回:
结果将是字符串“xxaxxxx”和“xxxxbxxxcxxx”
我知道使用“is_any_of”谓词的boost :: split,但是调用“is_any_of(”abc“)”会导致将字符串拆分为单个字符'a','b'和'c'同样,这不是我想要的。
任何帮助将不胜感激。
谢谢
答案 0 :(得分:7)
是的,有一种方法(这是我知道的一种方式,也许有更好的方法)使用boost::algorithm::split_regex
来分割字符序列,其中分隔符是正则表达式。
示例:
vector< string > result;
boost::algorithm::split_regex( result, str, regex( "^((?!abc)*abc(?!abc)*)*$" ) ) ;
copy( result.begin(), result.end(), ostream_iterator<string>( cout, "\n" ) ) ;
答案 1 :(得分:6)
split_regex
很好。如果您不想处理正则表达式,可以使用ifind_all
算法,如example所示。您收到所有出现的分隔符的iterator_range
(开始/结束)。您的令牌位于它们之间(以及字符串的开头和结尾)。
答案 2 :(得分:0)
如果您知道您的输入字符串由哪些字符组成(例如,一个简单的英文句子,只有 EN 字符),您可以用 special_symbol 包围您的 word_delimiter,用它替换所有出现的单词定界符并用 special_symbol 分割.
例如,我在这里使用了“%”:
std::vector<std::string> sentence_parts;
boost::replace_all(sentence, word, "%" + word_delimiter + "%");
boost::split(sentence_parts, sentence, boost::is_any_of("%"));
您需要确保您的输入字符串中永远不会包含特殊符号,否则将无法正常工作!