gpt4 book ai didi

c++ - regex c++-如何在字符串末尾保存多个标点符号?

转载 作者:行者123 更新时间:2023-12-01 15:12:28 26 4
gpt4 key购买 nike

如果我有一个词,比如“蓝色...”或“天空!!”或“r;e;d”

我想保存每个单词末尾的标点符号。因此,如果我在函数中输入 blue...,它会返回...如果我输入 sky!进入同一个函数,它会返回!如果我输入 r;e;d 则不会返回任何内容,因为标点符号位于句子的中间。

到目前为止我的函数看起来像

string returnLastPunctuation(string word) {
string punct;
regex_match(word, punct, regex("[\\.?!]+$"));
return punct;
}

但是代码甚至无法运行,那么我该如何修复它呢?

最佳答案

您当前的正则表达式仅支持标点符号。

您的正则表达式需要能够满足:没有结尾标点符号、有尾部标点符号、只有标点符号。

完全不使用正则表达式的逻辑可能会更容易,而是从字符串末尾检查标点符号并从中返回子字符串。

但是如果您决定使用正则表达式......

#include <iostream>
#include <regex>
#include <string>
#include <cassert>

using std::cout;
using std::regex;
using std::regex_match;
using std::smatch;
using std::string;

namespace {

string returnLastPunctuation(string word) {
string punct;
auto re = regex("(.*[^\\.?!])|(.*[^\\.?!]([\\.?!]+))|([\\.?!]+)");
smatch match;
auto found = regex_match(word, match, re);

if (found && match.size() == 5) {
punct = match[3];

if (punct.empty()) {
punct = match[4];
}
}

return punct;
}

} // anon

int main() {
assert(returnLastPunctuation("blue...") == "...");
assert(returnLastPunctuation("sky!!") == "!!");
assert(returnLastPunctuation("r;e;d") == "");
assert(returnLastPunctuation(".?..") == ".?..");
}

关于c++ - regex c++-如何在字符串末尾保存多个标点符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63164974/

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