如何使用正则表达式删除 std::wstring 中特定短语的所有实例?

Posted

技术标签:

【中文标题】如何使用正则表达式删除 std::wstring 中特定短语的所有实例?【英文标题】:How to use Regular Expressions to remove all instances of a specific phrase in an std::wstring? 【发布时间】:2015-12-04 04:25:52 【问题描述】:

我正在尝试遵循这个答案:https://***.com/a/32435076/5484426,但对于 std::wstring。到目前为止,我有这个:

std::wstring str = L"hello hi hello hi hello hi";
std::wregex remove = L"hi";

现在我想这样做:regex_replace(str,remove,""); 不过,它看起来不像 regex_replace 对 wstring 有效。如何删除此字符串的所有实例?

【问题讨论】:

【参考方案1】:

std::regex_replace 当然适用于std::wstring,以及std::basic_string 的所有其他专业。但是,替换格式字符串的字符类型必须与正则表达式和输入字符串的字符类型匹配。这意味着您需要一个宽替换格式字符串:

std::regex_replace(str, remove, L"");

除此之外,std::wregex 的构造函数采用 const wchar_t* 是显式的,因此您的复制初始化将不起作用。此外,std::regex_replace 的这种重载会返回一个新字符串,替换完成而不是原地执行,这是需要注意的。

这是一个example,考虑了以下几点:

std::wstring str = L"hello hi hello hi hello hi";
std::wregex removeL"hi";   

str = std::regex_replace(str, remove, L"");

【讨论】:

以上是关于如何使用正则表达式删除 std::wstring 中特定短语的所有实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UTF-8 std::string 转换为 UTF-16 std::wstring?

如何可移植地将 std::wstring 写入文件?

如何使用 wstring_convert 在 utf16 和 utf32 之间进行转换?

如何将CString和:: std :: string :: std :: wstring互相转换?

如何将 std::wstring 转换为 const TCHAR*?

如何使用 PInvoke 将 std::wstring 从 C++ 返回到 C# 而无需编写字符串缓冲区转换 [重复]