如何查找除使用正则表达式定义的句子以外的所有句子?

时间:2019-04-30 15:11:01

标签: c++

最重要的是,我需要在一些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;
}

正如我上面所说,我想获得所有内容,除了评论,而不是相反。 我还需要搜索多行注释,这些注释在““文本”“”“中定义。 但是在此实现中,我什至无法想象如何做到这一点,因为现在它是逐行阅读的,在这种情况下,借助常规程序的多行注释对我来说是不可能的

感谢您的建议和帮助。

1 个答案:

答案 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;
}
  1. 使用C ++正则表达式来处理多行Python文字"""..."""很不容易(与上面的示例不同):互斥需求很少(恕我直言):
    • regex应该扩展为POSIX,但是
    • POSIX正则表达式不支持空的正则表达式匹配
    • 要制作RE以匹配否定的字符序列,需要否定的前瞻断言,这将是一个空匹配:(

这意味着您需要考虑并提出一些编程逻辑以删除多行Python文本文字