gpt4 book ai didi

c++ - 使用 RegEx 过滤错误的输入?

转载 作者:行者123 更新时间:2023-11-30 01:08:35 28 4
gpt4 key购买 nike

看这个例子:

string str = "January 19934";

结果应该是

Jan 1993

我想我已经创建了正确的 RegEx ([A-z]{3}).*([\d]{4}) 在这种情况下使用,但我不知道我应该做什么现在做?

如何使用 RegEx 提取我要查找的内容?有没有一种方法可以接收 2 个变量,第一个是第一个 RegEx 括号的结果:([A-z]{3}),第二个结果是第二个括号:[[\d]{4}]?

最佳答案

您的正则表达式包含一个常见的拼写错误:[A-z] matches more than just ASCII letters .此外,.* 将抓取所有字符串直到其末尾,回溯将强制 \d{4} 匹配最后 4 位数字.您需要使用带点的 lazy 量词,*?

然后,使用 regex_search 并连接 2 组值:

#include <regex>
#include <string>
#include <iostream>
using namespace std;

int main() {
regex r("([A-Za-z]{3}).*?([0-9]{4})");
string s("January 19934");
smatch match;
std::stringstream res("");
if (regex_search(s, match, r)) {
res << match.str(1) << " " << match.str(2);
}
cout << res.str(); // => Jan 1993
return 0;
}

参见 C++ demo

模式解释:

  • ([A-Za-z]{3}) - 第 1 组:三个 ASCII 字母
  • .*? - 除换行符外的任何 0+ 个字符尽可能少
  • ([0-9]{4}) - 第 2 组:4 位数字

关于c++ - 使用 RegEx 过滤错误的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42254517/

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