分割使用整个字符串作为分隔符
Boost::Split using whole string as delimiter
我想知道是否有一种方法使用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("%"));
您需要确保您的输入字符串中永远不会有特殊的符号,否则它将无法正常工作!
相关文章:
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 字符串开头的分隔符
- 尝试将 c 字符串数组与分隔符连接起来
- 根据新的行分隔符从字符串中删除子字符串
- 同一分隔符之间的多个子字符串
- 字符串流分隔符
- 使用正则表达式c++从单词和分隔符之间的字符串中提取所有子字符串
- C++获取两个分隔符之间的字符串并替换它
- 是否存在像C++中那样带有分隔符的C#原始字符串
- 如何从字符串开头到第二个分隔符中提取子字符串?
- 如何使用两个不同的分隔符拆分字符串
- 将子字符串提取到最后 n 个分隔符C++
- 基于 C++ 中的多个字符串分隔符拆分字符串
- 使用 boost::split 按分隔符的前 N 次匹配来拆分字符串
- 使用分隔符空格解析字符串,但字符串也包含空格
- 获取具有同一分隔符的多个实例的字符串的子字符串
- 具有两个分隔符的字符串流
- 子字符串和分隔符
- 将具有分隔符的字符串拆分为 3 个变量
- C++ 获取两个分隔符字符串之间的字符串