最重要的是,我需要在一些Python代码中找到所有注释并将其删除,仅保留代码本身。 但是我却不能做到相反。也就是说,我自己可以找到评论,但找不到所有内容。
我尝试使用“?!”,组成了一个正则表达式,例如“(。*)(?!#。*)”。但这并没有按我预期的那样工作。 就像在我所附加的代码中一样,我也尝试使用“ else”,即写入不同的变量,但是由于某种原因,它甚至都没有去那里
#include <iostream>
#include <fstream>
#include <string>
#include <regex>
int main()
{
std::string line;
std::string new_line;
std::string result;
std::string result_re;
std::string path;
std::smatch match;
std::regex re("(#.*)");
std::cout << "Enter the path\n";
std::cin >> path;
std::ifstream in(path);
if (in.is_open())
{
while (getline(in, line))
{
if (std::regex_search(line, match, re))
{
for (int i = 0; i < match.size(); i++)
result_re += match[i + 1];
result_re += "\n";
}
else
{
for (int i = 0; i < match.size(); i++)
result += match[i];
//result += "\n";
}
std::cout << line << std::endl;
}
}
in.close();
std::cout << result_re << std::endl;
std::cout << "End of program" << std::endl;
std::cout << result << std::endl;
system("pause");
return 0;
}
正如我上面所说,我想获得所有内容,除了评论,而不是相反。 我还需要搜索多行注释,这些注释在““文本”“”“中定义。 但是在此实现中,我什至无法想象如何做到这一点,因为现在它是逐行阅读的,在这种情况下,借助常规程序的多行注释对我来说是不可能的
感谢您的建议和帮助。
答案 0 :(得分:1)
1。不要尝试逐行解析输入文件。取而代之的是吸收整个文本,然后让正则表达式替换所有注释,这样您的整个程序将如下所示:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <regex>
using namespace std; // for brevity
int main() {
cout << "Enter the path: ";
string filename;
getline(cin, filename);
string pprg{ istream_iterator<char>(ifstream{filename, ifstream::in} >> noskipws),
istream_iterator<char>{} };
pprg = regex_replace(pprg, regex{"#.*"}, "");
cout << pprg << endl;
}
"""..."""
很不容易(与上面的示例不同):互斥需求很少(恕我直言):
这意味着您需要考虑并提出一些编程逻辑以删除多行Python文本文字