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

  • 相关阅读:
    REQUIRED与REQUIRED_NEW
    springboot启动原理
    Mysql缓存的配置和使用
    Mysql-15-mysql分布式应用
    Mysql的日志管理
    Mysql的主从复制
    Mysql的备份和恢复
    Mysql-7-mysql函数
    Mysql-6-数据类型和运算符
    Mysql-5-数据表的基本操作
  • 原文地址:https://www.cnblogs.com/xueguangfeng/p/re-cpp-comment.html
Copyright © 2011-2022 走看看