Python开发之利用re模块去除代码块注释
作者:物联黄同学 发布时间:2022-08-26 22:11:59
前言
上次做了用于输入样例格式修改,相当于测试用例的过滤器,这次我们使用类似的思路来做一个对于像C++代码中块注释的过滤器。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
观察上述代码,这是我从一道leetocde题目给的代码复制下来的,这是一个结构体的定义,语言是c++,对于这种块注释我们把它放在visual studio 2022 中,使用取消注释时,这些*还会保留,有时候一个个清除过于麻烦。所以,我们可以利用python的re模块实现对这种讨厌注释块的过滤,保留像结构体这种有意义的信息。
知识点
基本上和上次差不多,这里再简单回顾一下。
re
re模块主要是python 中集成正则表达式的模块,功能主要是字符串的匹配。
这里用到了三个re函数
re.complie(): 生成正则表达式对象
re.sub():将指定内容替换
re.search(): 查找函数,在字符串中查找第一个符合正则表达式对象的子串。
文件
除了re外,还使用到文件的一些操作,之前我们对于清空文件内容采取的方法是使用先以只读模式读取内容,然后关闭文件,再以写的方式打开,由于只写的方式会自动将内容清空的特性,自动实现该特点后再将内容写入。这次对于清空,我们采取一个新的操作。
我们可以以 r+ 模式打开文件,并在读取完后,使用truncate()函数实现对文件内容清空。
核心代码
正则表达式对象,第一行是块注释的一些特征
pattern = re.compile(r'/\*{0,2}| \* | \*/')
white = re.compile(r'\S')
识别开头的/* 或者*并替换,以及跳过多余的空白行。
# 由于只针对开头,只能使用一次匹配
line = pattern.sub("", line, 1)
# 忽略空白行
if white.search(line):
ans += line + "\n"
操作流程
我们先将内容用记事本保存。
然后在pycharm 中运行我们程序,当然要先传入文件地址。
然后再打开文件,我们就会发现文件内容方式了更改。
这里不知道什么原因,居然把那个Defintion去掉了,看了代码也没懂,有机会再研究一下。
其实是再第一行末位了哈哈哈。
code(Python)完整
import re
# 去除块注释
def rem_block_ann(filepath):
"""
该函数用于去除讨厌的块注释
:param filepath: 文件路径,txt文件
:return:
"""
pattern = re.compile(r'/\*{0,2}| \* | \*/')
white = re.compile(r'\S')
# 打开文件
file = open(path, 'r+')
# 先将内容分行存入列表lines
lines = file.read().split('\n')
file.truncate(0)
ans = ""
for line in lines:
# 由于只针对开头,只能使用一次匹配
line = pattern.sub("", line, 1)
# 忽略空白行
if white.search(line):
ans += line + "\n"
print(ans, file=file)
file.close()
path = "F:\\刷\\leetcode\\22年3月\\blog\\testdemo\\226structcode.txt"
rem_block_ann(path)
不摆了。
总结
来源:https://blog.csdn.net/weixin_54891898/article/details/123657335


猜你喜欢
- python环境 3.6.5 win7 linux环境同理先尝试了PyInstaller ,打包时一直提示 no module named
- 具体代码如下所示:package mainimport ( "encoding/json" "fmt"
- 前言:散点图,又称散点分布图,是使用多个坐标点的分布反映数据点分布规律、数据关联关系的图表,Matplotlib 中可以通过以下方式绘制散点
- 一、插件是什么?插件是遵循一定规范的应用程序接口编写出来的程序,而chrome插件则是运行在chrome浏览器上的小程序,能帮我们解决一下工
- 开始码代码之前,我们先来了解一下三种邮件服务协议:1、SMTP协议SMTP(Simple Mail Transfer Protocol),即
- <%'============================================================
- 中间件介绍中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与
- 最近想尝试一下在IBM Bluemix上使用Python语言创建Web应用程序,所以需要在本地搭建Python Web的开发测试环境。关于P
- PDO::execPDO::exec — 执行一条 SQL 语句,并返回受影响的行数(PHP 5 >= 5.1.0, PECL pdo
- QueryCache(下面简称QC)是根据SQL语句来cache的。一个SQL查询如果以select开头,那么MySQL服务器将尝试对其使
- 目前手边的一些工作,需要实现声音播放功能,而且仅支持wav声音格式。现在,一些网站上支持文字转语音功能,但是生成的都是MP3文件,这样还需要
- 1.简介本文将介绍首先为什么需要主动关闭goroutine,并介绍如何在Go语言中关闭goroutine的常见套路,包括传递终止信号和协程内
- pygame如何捕捉鼠标的活动初始化参数import pygame, sysfrom pygame.locals import *def p
- pandas转数组np.array(pandas)数组转pandaspandas.DataFrame(numpy)pandas连接,只是左右
- 概要相信很多像我一样初入门前端的时候,都是基于某个模板来学。 vue-element-admin 或者 vue-element-templa
- 本书状态你正在阅读的已经是本书的最终版。因此,只有当进行错误更正以及针对新版本Node.js的改动进行对应的修正时,才会进行更新。本书中的代
- 前言Python 中的sys 模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解释器强交互的函数。本文将会频
- 在vue-router控制前端权限是常见需求:有一种做法是直接在后端完成判断,提供页面列表和操作列表,在前端进行渲染,但这个方案并不优雅,前
- 看下面的一组例子:alert(true.toString());alert(false.toString());alert(1.123.to
- 例如数据 列Namename abcd最后的结果a*b*c*d*declare @test table( namevarchar(10))&