gpt4 book ai didi

c++ - 正则表达式匹配字符串之间的数字

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:52 25 4
gpt4 key购买 nike

我需要从以下文本中提取整数值,介于字符串“start:”和“end:”之间,并且介于两者之间。

 111222 garbage  999888 start:        123456       end:     start:         654321     end:

想要的结果:

123456
654321

这是我所拥有的,但我需要它来排除整数周围未知数量的空格。

标准::正则表达式

(?<=start:)(.*?)(?=end:)

RegExr

最佳答案

你可以使用

std::regex reg(R"(start:\s*(\d+)\s*end:)");

参见 regex demo

它定义了匹配 start:start:\s*(\d+)\s*end: 正则表达式模式,0+ 空格,然后捕获到第 1 组一个或多个数字,然后匹配 0+ 个空格和 end: 子字符串。

请注意,如果您不能使用原始字符串文字(R"(...)" 表示法),您可以使用常规字符串文字定义模式,其中所有反斜杠都应加倍:“开始:\\s*(\\d+)\\s*结束:”

要获取所有匹配项,您需要 std::sregex_token_iterator 并且在获取匹配项时,指定您需要获取所有第 1 组值:

const std::regex reg(R"(start:\s*(\d+)\s*end:)");
std::smatch match;
std::string s = "garbage 111222 garbage ... 999888 fewfew... start: 123456 end: start: 654321 end:";
std::vector<std::string> results(std::sregex_token_iterator(s.begin(), s.end(), reg, 1),
std::sregex_token_iterator());

查看 online C++ demo

如果start:end:中可以有任何值,将\d+替换为.*?(匹配除换行符以外的任何 0+ 个字符)。

关于c++ - 正则表达式匹配字符串之间的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51010366/

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