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,欢迎指正

  • 相关阅读:
    为用户添加角色
    WCF、MongoDB
    文件分布式存储实现例程
    Redis的Replication(复制)
    Lucene热词显示并选择
    Lucene热词统计
    通过队列解决Lucene文件并发创建索引
    Lucene.net应用
    Lucene.net
    Redis
  • 原文地址:https://www.cnblogs.com/xueguangfeng/p/re-cpp-comment.html
Copyright © 2011-2022 走看看