提问者:小点点

为什么我的正则表达式在C++中不能工作,但在Python中可以工作?


我正在使用正则表达式来提取RPN公式中的子字符串。例如,使用以下公式:

我使用这个正则表达式来提取子字符串(我希望它能返回10“,”2“,”/“,”3“,”+“,”7“,”4}

首先,我用Python尝试:

s = r"([0-9]+|[\/*+-])\s?"

text = "10 2 / 3 + 7 4"

x = re.findall(s,text)

for i in x:
    print(i)

这是输出,正如我所认为的那样。

10
2
/
3
+
7
4

但是,当我使用C++中的表达式时:

#include <bits/stdc++.h>
#include <regex>
using namespace std;
int main(){
    string text = "10 2 / 3 + 7 4"; 
    smatch m;
    regex rgx("([0-9]+|[\/*+-])\s+"); 

    regex_search(text, m, rgx);

    for (auto x : m){
        cout << x << " ";
    }
}

编译器在第7行返回两个警告:未知转义序列:“/”和“s”,它只返回几个空格。

我想知道我的表达式在C++中使用时有什么问题?


共1个答案

匿名用户

在C++中用作转义序列。您必须将写成才能将其传递给正则表达式引擎。

    regex rgx("([0-9]+|[\\/*+-])\\s+"); 

另一种选择是使用原始字符串文字(自C++11以来):

    regex rgx(R"(([0-9]+|[\/*+-])\s+)"); 

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(正则表达式|c++|中|工作|但在|python|中|工作)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?