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"

操作流程

我们先将内容用记事本保存。

Python开发之利用re模块去除代码块注释

然后在pycharm 中运行我们程序,当然要先传入文件地址。

然后再打开文件,我们就会发现文件内容方式了更改。

Python开发之利用re模块去除代码块注释

这里不知道什么原因,居然把那个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,代码块,注释
0
投稿

猜你喜欢

  • Python中json.load()和json.loads()有哪些区别

    2022-11-09 09:24:05
  • 从p开始,循序渐进学习WEB标准

    2008-03-08 18:53:00
  • php 一维数组的循环遍历实现代码

    2023-06-12 00:49:04
  • 简述 Python 的类和对象

    2023-05-17 12:44:23
  • python实现根据窗口标题调用窗口的方法

    2022-06-12 04:24:40
  • JavaScript caller与callee属性

    2009-01-19 13:39:00
  • 标签水平右对齐更适合中文网站

    2009-05-01 11:54:00
  • 最新屏蔽百度快照的方法

    2009-07-06 14:37:00
  • Django RestFramework 全局异常处理详解

    2023-12-15 03:16:42
  • Python实现批量下载ts文件并合并为mp4

    2022-07-15 20:24:09
  • 常用java正则表达式的工具类

    2023-06-14 09:16:46
  • python删除列表内容

    2023-05-23 02:47:49
  • Dreamweaver如何防止及消除垃圾代码的产生

    2007-11-13 17:15:00
  • optgroup、sub、sup和bdo标签

    2009-07-26 18:39:00
  • Python使用captcha制作验证码的实现示例

    2023-04-16 00:49:35
  • python regex库实例用法总结

    2023-11-02 12:17:27
  • 使用Fabric自动化部署Django项目的实现

    2022-09-05 22:00:33
  • 一次MySQL性能优化实战

    2009-03-09 15:01:00
  • Python操作注册表详细步骤介绍

    2023-09-16 01:05:53
  • tensorflow+k-means聚类简单实现猫狗图像分类的方法

    2022-11-04 10:45:27
  • asp之家 网络编程 m.aspxhome.com