c++ - 正则表达式匹配字符串之间的数字
问题描述
我需要从以下文本中提取整数值,在字符串“start:”和“end:”之间,并且仅在字符串之间。
111222 garbage 999888 start: 123456 end: start: 654321 end:
想要的结果:
123456
654321
这是我所拥有的,但我需要它来排除整数周围未知数量的空格。
标准::正则表达式
(?<=start:)(.*?)(?=end:)
解决方案
您可以使用
std::regex reg(R"(start:\s*(\d+)\s*end:)");
请参阅正则表达式演示。
它定义了start:\s*(\d+)\s*end:
匹配 , 0+ 个空格的正则表达式模式start:
,然后将一个或多个数字捕获到 Group 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());
如果 and 内可以有任何值start:
,请end:
替换\d+
为.*?
(匹配除换行符以外的任何 0+ 字符)。
推荐阅读
- flutter - 如何在 Flutter 应用程序中使用 async await inisde streamBuilder 或在 StreamBuilder 中解决我的未来?
- php - PrestaShop : 我们无法开始安装 :( PrestaShop 安装需要启用 zip 扩展
- c++ - 检查 QTextEdit 的内容是否为有效字体。- Qt
- android - 要在图像中使用的正确可扩展对象 (KOTLIN)
- c# - 运行向导时出错。Telerik.VSX.WizardEngine.ScenarioManagerException:类别:一般
- python - 如何在 Python 中合并多个文件
- javascript - Unsplash API 控制图像质量
- excel - Vba错误:在段落之后用单词形成表格
- android - 安装的构建工具修订版 31.0.0 已损坏。使用 SDK 管理器删除并重新安装。无法在我的外部设备上运行我的项目
- javascript - 虽然我使用的是重复数组,但 Array.map() 函数会更改我的原始数组