zoukankan      html  css  js  c++  java
  • 使用正则表达式,去除C++的注释

    难点是识别字符串中的//, /*和*/。后来觉得只要在匹配注释的时候越过字符串,不去管它就好了。

    匹配C++中的字符串的正则表达式是"([^\*]|\.)*?",意思是引号中字符不能有和*,但是可以有.这种情况,这样就避开了类似"abc"这种字符串,同时也包含了"abc"","abc "这些情形。

    代码如下:

    #-*- coding:gbk -*-
    import re
    
    def ReplaceComment(matchobj):
        if not matchobj:
            return
        
        matchstr = matchobj.group(0)
        if matchstr.startswith('"') and matchstr.endswith('"'):
            return matchstr
        else:
            return ''
    
    def RemoveComment(inputfileName, outputfileName):
        codeString = ""
        with open(inputfileName, "rt") as inputfile:
            codeString = inputfile.read()
        
        singleLineCommentExp = r'//[^
    ]*'
        multiLinecommentExp = r'/*.*?*/'
        literalStringExp = r'"([^\"]|\.)*?"' #. should match newline, for scenario like multiline literal string
        
        patternExp = literalStringExp + '|' + singleLineCommentExp + '|' +  multiLinecommentExp
        codeString = re.sub(patternExp, ReplaceComment, codeString, 0, re.MULTILINE|re.DOTALL)
        
        with open(outputfileName, "wt") as outputfile:
            outputfile.write(codeString)
    

     如果发现BUG,欢迎指正

  • 相关阅读:
    Dapper的常用操作
    git下载慢的解决方案
    笔记
    第06组 Beta冲刺(3/5)
    第06组 Beta冲刺(2/5)
    第06组 Beta冲刺(1/5)
    第06组 Alpha事后诸葛亮
    第06组 Alpha冲刺(6/6)
    第06组 Alpha冲刺(5/6)
    第06组 Alpha冲刺(4/6)
  • 原文地址:https://www.cnblogs.com/xueguangfeng/p/re-cpp-comment.html
Copyright © 2011-2022 走看看