我需要从以下文本中提取整数值,介于字符串“ start:”和“ end:”之间,并且仅 之间。
111222 garbage 999888 start: 123456 end: start: 654321 end:
想要的结果:
123456
654321
这里是我所拥有的,但是我需要它来排除整数周围未知数量的空格。
std :: regex
(?<=start:)(.*?)(?=end:)
答案 0 :(得分:2)
您可以使用
std::regex reg(R"(start:\s*(\d+)\s*end:)");
请参见regex demo。
它定义start:\s*(\d+)\s*end:
的正则表达式模式,该模式匹配start:
,0+空格,然后捕获到组1中一个或多个数字,然后匹配0+空格和end:
子字符串。
请注意,如果无法使用原始字符串文字(R"(...)"
表示法),则可以使用常规字符串文字定义模式,其中所有反斜杠都应加倍:"start:\\s*(\\d+)\\s*end:"
。
要获取所有匹配项,您需要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());
如果start:
和end:
中可以有任何值,请将\d+
替换为.*?
(匹配除换行符以外的任何0+字符)。
答案 1 :(得分:1)
要提取start:
和end:
之间的整数而不用后面看,您可以在捕获组中捕获一个或多个数字:
start:
后跟零个或多个空白字符\s*
(/d+)
捕获一组中的一个或多个数字(?=\s*end:)
是肯定的lookahead,断言其后是零个或多个空格字符和end:
答案 2 :(得分:0)
我需要从以下文本中提取整数值,介于字符串“ start:”和“ end:”之间,并且仅 之间。
111222 garbage 999888 start: 123456 end: start: 654321 end:
您可以使用以下命令:start:\s*([0-9]+)
int main()
{
std::string str{R"(111222 garbage 999888 start: 123456 end: start: 654321 end:)"};
std::regex rgx{R"(start:\s*([0-9]+))"};
std::smatch matches;
while (std::regex_search(str, matches, rgx)) {
std::cout << matches.str(1) << std::endl;
str = matches.suffix();
}
}
输出:
123456
654321