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

 更新时间:2022年11月17日 12:41:33   作者:物联黄同学  
Python的re模块主要是正则表达式的操作函数,下面这篇文章主要给大家介绍了关于Python开发之利用re模块去除代码块注释的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

上次做了用于输入样例格式修改,相当于测试用例的过滤器,这次我们使用类似的思路来做一个对于像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)

不摆了。

总结 

到此这篇关于Python开发之利用re模块去除代码块注释的文章就介绍到这了,更多相关Python去除代码块注释内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python终端输出彩色字符方法详解

    Python终端输出彩色字符方法详解

    这篇文章主要介绍了Python终端输出彩色字符方法详解,需要的朋友可以参考下
    2020-02-02
  • keras修改backend的简单方法

    keras修改backend的简单方法

    这篇文章主要介绍了keras修改backend的简单方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python sys模块中maxsize()方法教程示例

    Python sys模块中maxsize()方法教程示例

    这篇文章主要为大家介绍了Python sys模块中maxsize()方法教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Python tkinter进度条控件(Progressbar)的使用

    Python tkinter进度条控件(Progressbar)的使用

    这篇文章主要介绍了Python tkinter进度条控件(Progressbar)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 利用Python批量导出mysql数据库表结构的操作实例

    利用Python批量导出mysql数据库表结构的操作实例

    这篇文章主要给大家介绍了关于利用Python批量导出mysql数据库表结构的相关资料,需要的朋友可以参考下
    2022-08-08
  • Python操作mongodb的9个步骤

    Python操作mongodb的9个步骤

    本篇文章给大家详细分享了Python操作mongodb的详细步骤以及实例代码,有需要的朋友参考学习下吧。
    2018-06-06
  • pycharm连接虚拟机的实现步骤

    pycharm连接虚拟机的实现步骤

    本文主要介绍了pycharm连接虚拟机的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • 如何使用Numpy创建三维矩阵

    如何使用Numpy创建三维矩阵

    这篇文章主要介绍了如何使用Numpy创建三维矩阵问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python中Tkinter 窗口之输入框和文本框的实现

    python中Tkinter 窗口之输入框和文本框的实现

    这篇文章主要介绍了python中Tkinter 窗口之输入框和文本框的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python列表[list]和元组(tuple)详情

    python列表[list]和元组(tuple)详情

    这篇文章主要介绍了python列表[list]和元组(tuple)详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论