Regex去掉前导零
Regex to strip leading zeros
本文关键字:Regex 更新时间:2023-10-16
我是C++中Regex的新手
这是我需要的:
0002000043->X43
B00030->B30
我正在使用这个正则表达式
std::regex in("[A-H][[:d:]]");
我想知道regex是否能够在使用regex"in"检查后自动从给定的字符串中去掉前导零。
或者Regex只是一个匹配的库,对修改字符串没有帮助?干杯
std::regex
也有一个regex_replace
方法。它可以根据给定的模式和替换模式修改字符串。
在您的情况下,您可以使用backreferences来捕获的子字符串(这些子字符串在捕捉组的帮助下匹配和捕获,即包含在未加括号中的子模式)。
因此,在您的情况下,您可以使用以下正则表达式:
^([A-Z])0*([[:digit:]]*)$
正则表达式匹配:
^
-字符串的开头([A-Z])
-任何大写ASCII字母(被捕获到组1中,我们可以在替换模式中用$1
引用它)0*
-0个或多个零([[:d:]]*)
-匹配0个或多个任意数字,并将它们放入捕获组2(替换模式中的$2
)$
—字符串结束
请参阅regex演示和IDEONE演示:
#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演示和此regex演示
相关文章:
- 此模式的C++RegEx
- C++ std::regex 使用前瞻失败
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 你能防止 std::regex 在无效表达式上抛出异常吗?
- 使用Regex解析cpp中的字符串并创建映射
- C++:如何用split查找单词?Regex
- 在VC2015U3上,std::regex比boost::regex慢得多
- 是否有更有效的方法来生成日期的REGEX字符串
- 在C++中使用带有regex的捕获组
- 将std::regex设置为静态的好主意吗
- 为什么Regex(c++)需要指数时间
- std::regex and dual ABI
- C++11 std::regex后备选项
- 以不同的方式替换每一项,regex c++
- 使用 boost::regex (c++) 比较两个正则表达式
- Build Boost Regex for Windows VS2013
- 包含在 std::regex 搜索中,使用 std::regex_token_iterator 从 std::sub_m
- std::string references、std::regex和boost::filesystem的基本概念
- std::regex 是否保证了最坏情况下的时间复杂度?