gpt4 book ai didi

c++ - boost 正则表达式 : [:alpha:] and accented characters

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:20 24 4
gpt4 key购买 nike

我正在尝试使用 Boost 将字符串中的每个非字母字符替换为 "":

std::string sanitize(std::string &str)
{
boost::regex re;
re.imbue(std::locale("fr_FR.UTF-8"));
re.assign("[^[:alpha:]]");
str = boost::regex_replace(str, re, " ");
return str;
}


int main ()
{
std::string test = "(ça) /.2424,@ va très bien ?";
cout << sanitize(test) << endl;
return 0;
}

结果是 a va tr s bien 但我想得到 ça va très bien

我错过了什么?

最佳答案

boost::regex::imbue 没有做您在这里希望的事情——特别是,它不会使 boost::regex 与 UTF-8 一起工作。 (您可能会以这种方式使用 ISO 8859-1 或类似的单字节字符编码,但这似乎不是您想要的)。

对于 UTF-8 支持,您将需要使用将处理 Unicode 的 boost::regex 类之一 - 参见 http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/unicode.html .

这是我认为可以满足您要求的一些代码:

#include <string>
#include <boost/regex/icu.hpp>

std::string sanitize(std::string &str)
{
boost::u32regex re = boost::make_u32regex("[^[:alpha:]]");
str = boost::u32regex_replace(str, re, " ");
return str;
}


int main ()
{
std::string test = "(ça) /.2424,@ va très bien ?";
std::cout << test << "\n" << sanitize(test) << std::endl;
return 0;
}

参见 http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html更多示例。

关于c++ - boost 正则表达式 : [:alpha:] and accented characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21989856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com