引发'std :: regex_error'what()实例后终止调用:括号未关闭

时间:2019-07-25 00:10:01

标签: c++ regex

我要将代码中第一个g到第一个括号的字符串匹配。我不知道为什么不这样做,因为我使用了转义字符。 例如,在此字符串上:

您好测试g55_2(cnn

我打算匹配g55_2   // g ++ 5.4.0

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

int main()
{
    std::string s("g.*\(");
    std::regex re(s);
}

我在https://regex101.com/处尝试了我的正则表达式,并且可以使用,但是由于标题错误,我的c ++无法编译。

1 个答案:

答案 0 :(得分:5)

您在C ++中转义了括号。正则表达式需要一个\字符(在C ++中需要转义)和一个(字符:

import pandas as pd
import matplotlib.pyplot as plt

a = [['2015-01-08', '174.0'], ['2015-01-09', '172.0'], ['2015-01-11', '170.5']]

df = pd.DataFrame(a, columns=["dates", "values"])
df["dates"] = pd.to_datetime(df["dates"])
df["values"] = pd.to_numeric(df["values"])

plt.plot("dates", "values", data=df)

plt.show()

或者,使用原始字符串文字来避免担心C ++逃脱自己的方式的麻烦:

std::string s("g.*\\(");

std::string s(R"(g.*\()"); 内的文字文本被当作字符串。

还请注意,R"(...)"是贪婪的,但是您不希望它贪婪,因此它会在第一个括号而不是最后一个括号处停止。您可以添加*使其不贪心:

?