Boost::Split 使用整个字符串作为分隔符
Posted
技术标签:
【中文标题】Boost::Split 使用整个字符串作为分隔符【英文标题】:Boost::Split using whole string as delimiter 【发布时间】:2011-09-15 20:17:55 【问题描述】:我想知道是否有一种方法使用 boost::split 来拆分字符串,使用整个字符串作为分隔符。例如:
str = "xxaxxxxabcxxxxbxxxcxxx"
有没有一种方法可以使用"abc"
作为分隔符来分割这个字符串?因此返回:
结果将是字符串 "xxaxxxx"
和 "xxxxbxxxcxxx"
。
我知道boost::split
使用"is_any_of"
谓词,但是调用is_any_of("abc")
会导致字符串拆分为单个字符“a”、“b”和“c”,这不是我想要什么。
【问题讨论】:
您应该能够使用equals
和用作分隔符的字符串值的某种组合,但具体细节现在不知道。
Split on substring 的可能重复项
【参考方案1】:
是的,有一种方法(这是我知道的一种方法,也许有更好的方法)使用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" ) ) ;
【讨论】:
谢谢,这个解决方案有效,但它需要构建提升。目前我只使用头文件。 #include@Mythli 建议的split_regex
很好。如果您不想处理正则表达式,可以使用ifind_all
算法,如example 所示。您收到所有出现的分隔符的iterator_range
(开始/结束)。您的标记位于它们之间(以及字符串的开头和结尾)。
【讨论】:
谢谢,这个解决方案非常适合我的需求。【参考方案3】:如果您知道您的输入字符串由哪些字符组成(例如,一个简单的英文句子,只有 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("%"));
您需要确保您的输入字符串中永远不会有特殊符号,否则将无法正常工作!
【讨论】:
为什么这比 Mythli 已经描述的更直接的方法更可取? 这不一定是可取的,这是另一种方法。就个人而言,我不喜欢处理正则表达式...以上是关于Boost::Split 使用整个字符串作为分隔符的主要内容,如果未能解决你的问题,请参考以下文章