问题描述
我需要从以下文本中提取整数值,介于字符串 start:和 end:之间,并且仅 之间。
I need to extract integer values from the following text, between strings "start:" and "end:", and only between.
111222 garbage 999888 start: 123456 end: start: 654321 end:
想要的结果:
123456
654321
这里是我所拥有的,但是我需要它来排除整数周围未知数量的空格。
Here is what I have, but I need it to exclude the unknown number of spaces around the integer.
std :: regex
std::regex
(?<=start:)(.*?)(?=end:)
推荐答案
您可以使用
std::regex reg(R"(start:\s*(\d+)\s*end:)");
请参见。
它定义了 start:\s *(\d +)\ ends * end:
匹配的正则表达式模式:start:
,0 +个空格,然后捕获到组1中一个或多个数字,然后匹配0 +空格和 end:
子字符串。
It defines the start:\s*(\d+)\s*end:
regex pattern that matches start:
, 0+ whitespaces, then captures into Group 1 one or more digits, and then matches 0+ whitespaces and end:
substring.
请注意,如果您不能使用原始字符串文字( R(...)
表示法),您可以使用常规字符串文字定义模式,所有反斜杠都应加倍: start:\\s *(\\d +)\\s * end:
。
Note that in case you cannot use raw string literals (R"(...)"
notation), you may define the pattern with a regular string literal where all backslashes should be doubled: "start:\\s*(\\d+)\\s*end:"
.
要获取所有匹配项,您需要 std :: sregex_token_iterator
并在获得匹配项时,请指定您需要获取所有第1组值:
To obtain all matches, you need std::sregex_token_iterator
and when getting the matches, specify that you need to grab all Group 1 values:
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+个字符)。
If there can be any value inside start:
and end:
, replace \d+
with .*?
(matching any 0+ chars other than line break characters).
这篇关于正则表达式匹配字符串之间的数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!