分割使用整个字符串作为分隔符

Boost::Split using whole string as delimiter

本文关键字:分隔符 字符串 分割      更新时间:2023-10-16

我想知道是否有一种方法使用boost::split来分割使用整个字符串作为分隔符的字符串。例如:

str = "xxaxxxxabcxxxxbxxxcxxx"

是否有一种方法来分割这个字符串使用"abc"作为分隔符?因此返回:

结果将是字符串"xxaxxxx""xxxxbxxxcxxx"

我知道boost::split使用"is_any_of"谓词,但是调用is_any_of("abc")将导致在单个字符"a","b"answers"c"处分割字符串,这不是我想要的。

是的,有一种方法(这是我知道的一种方法,也许有更好的方法)使用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" ) ) ;

@Mythli建议的split_regex很好。如果不想处理正则表达式,可以使用ifind_all算法,如本例所示。您收到iterator_range(开始/结束)的所有出现您的分隔符。您的标记位于它们之间(并且位于字符串的开始和结束处)。

如果你知道你的输入字符串是由什么字符组成的(例如,一个简单的英语句子,只有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("%"));

您需要确保您的输入字符串中永远不会有特殊的符号,否则它将无法正常工作!