使用正则表达式,去除C++的注释

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

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

代码如下:

#-*- 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'//[^\n]*'
    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,欢迎指正

 

转载于:https://www.cnblogs.com/xueguangfeng/p/re-cpp-comment.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值