gpt4 book ai didi

c++ - 正则表达式无法从字符串中提取双参数子字符串

转载 作者:行者123 更新时间:2023-11-30 02:42:49 31 4
gpt4 key购买 nike

我正在尝试使用 Regex 库工具从文本文件中提取 double 和整数参数。这是捕获我收到的“std::regex_error”消息的最小代码:

#include <iostream>
#include <string>
#include <regex>

int main ()
{
std::string My_String = "delta = -002.050";
std::smatch Match;
std::regex Base("/^[0-9]+(\\.[0-9]+)?$");

std::regex_match(My_String,Match,Base);

std::ssub_match Sub_Match = Match[1];
std::string Sub_String = Sub_Match.str();
std::cout << Sub_String << std::endl;

return 0;
}

我对 Regex 库不是很熟悉,也找不到立即有用的东西。知道是什么原因导致此错误消息吗?为了编译我的代码,我使用启用了 -std=c++11 的 g++。但是,我确信问题不是由我的 g++ 编译器引起的,如 the answers given to this earlier question 中所建议的那样。 (我试过 several g++ compilers here )。

我希望从字符串“delta = -002.050”中得到“-002.050”,但我得到:

在抛出“std::regex_error”实例后调用终止什么():regex_error中止

最佳答案

假设您有 gcc4.9(旧版本不附带支持 <regex> 的 libstdc++ 版本),那么您可以通过更改 regex 来获得所需的结果。到

std::regex Base("[0-9]+(\\.[0-9]+)?");

这将捕获输入中 float 的小数部分以及小数点。

您的原始 regex 有几个问题.我认为领先/是一个错误。然后您尝试通过将正则表达式括在 ^...$ 中来匹配整个字符串,这显然不是您想要的。

最后,由于您只想匹配输入字符串的一部分,而不是整个字符串,因此您需要使用 regex_search 而不是 regex_match .

std::regex Base(R"([0-9]+(\.[0-9]+)?)"); // use raw string literals to avoid
// having to escape backslashes

if(std::regex_search(My_String,Match,Base)) {
std::ssub_match Sub_Match = Match[1];
std::string Sub_String = Sub_Match.str();
std::cout << Sub_String << std::endl;
}

Live demo


I expect to get "-002.050" from the string "delta = -002.050"

为此,将上面示例中的正则表达式修改为

std::regex Base(R"(([+-]{0,1}[0-9]+\.[0-9]+))");

以上将匹配单个、可选、前导 +-签名。

关于c++ - 正则表达式无法从字符串中提取双参数子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739010/

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