gpt4 book ai didi

正则表达式匹配除单词和周围连字符之间的所有空格之外的所有空格?

转载 作者:行者123 更新时间:2023-12-04 14:51:06 25 4
gpt4 key购买 nike

我想清理一个字符串,以便删除所有空格,除了单词之间的空格和周围的连字符

1234 - 文本 |单字,多字 |另一个文本,456 -> 1234 - 文本|一个单词,多个单词|另一个文本,456

std::regex regex(R"(\B\s+|\s+\B)"); //get rid of whitespaces except between words

auto newStr = std::regex_replace(str, regex, "*");
newStr = std::regex_replace(newStr, std::regex("*-*"), " - ");
newStr = std::regex_replace(newStr, std::regex("*"), "");

这是我目前使用的,但它相当丑陋,我想知道是否有一个正则表达式可以让我一次性完成。

最佳答案

你可以使用

(\s+-\s+|\b\s+\b)|\s+

替换为 $1,向后引用第 1 组中捕获的子字符串。请参阅 regex demo详细信息:

  • (\s+-\s+|\b\s+\b) - 第 1 组:- 两侧有一个或多个空格,或者一个或多个单词边界之间的空格
  • | - 或者
  • \s+ - 一个或多个空格。

查看 C++ demo :

std::string s("1234 - Text | OneWord , Multiple Words | Another Text , 456");
std::regex reg(R"((\s+-\s+|\b\s+\b)|\s+)");
std::cout << std::regex_replace(s, reg, "$1") << std::endl;
// => 1234 - Text|OneWord,Multiple Words|Another Text,456

关于正则表达式匹配除单词和周围连字符之间的所有空格之外的所有空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69094247/

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