gpt4 book ai didi

c++ - 正则表达式去除前导零

转载 作者:搜寻专家 更新时间:2023-10-31 00:31:32 24 4
gpt4 key购买 nike

我是 C++ 正则表达式的新手

这是我需要的:

X000000043 -> X43

B00030 -> B30

我正在使用这个正则表达式

std::regex in("[A-H][[:d:]]");

我想知道在使用正则表达式“in”检查后,正则表达式是否能够自动去除给定字符串中的前导零。

或者Regex只是一个匹配库,对修改字符串没有帮助?干杯。

最佳答案

std::regex 还有一个 regex_replace 方法。它可以根据给定模式和替换模式修改字符串。

在您的情况下,您可以使用反向引用捕获的子字符串(这些子字符串在捕获组的帮助下匹配和捕获,即子模式括在未转义的括号中)。

因此,在您的情况下,您可以使用以下正则表达式:

^([A-Z])0*([[:digit:]]*)$

正则表达式匹配:

  • ^ - 字符串的开始
  • ([A-Z]) - 任何大写 ASCII 字母(捕获到第 1 组中,我们将能够在替换模式中使用 $1 引用它)
  • 0* - 0 个或多个零
  • ([[:d:]]*) - 匹配 0 个或多个任意数字并将它们放入捕获组 2(替换模式中的 $2)<
  • $ - 字符串结尾。

参见 regex demo , 和 IDEONE demo :

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

int main() {
std::vector<std::string> strings;
strings.push_back("X000000043");
strings.push_back("B00030");
std::regex in("^([A-Z])0*([[:d:]]*)$");
for (size_t k = 0; k < strings.size(); k++)
{
std::cout << "Next string: " << strings[k] << std::endl;
std::cout << "Replace result: "
<< std::regex_replace(strings[k], in, "$1$2") << std::endl;
}
return 0;
}

输出:

Next string: X000000043
Replace result: X43
Next string: B00030
Replace result: B30

注意:如果这些字符串位于较大的文本中,请将 ^$ 替换为单词边界 \b:

std::regex in(R"(\b([A-Z])0*([[:digit:]]*)\b)");

查看此 IDEONE demo还有这个regex demo

关于c++ - 正则表达式去除前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33868675/

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