我正在使用正则表达式来提取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++中使用时有什么问题?
在C++中用作转义序列。您必须将
写成
才能将其传递给正则表达式引擎。
regex rgx("([0-9]+|[\\/*+-])\\s+");
另一种选择是使用原始字符串文字(自C++11以来):
regex rgx(R"(([0-9]+|[\/*+-])\s+)");