日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python開發之利用re模塊去除代碼塊注釋_python

作者:物聯黃同學 ? 更新時間: 2022-12-14 編程語言

前言

上次做了用于輸入樣例格式修改,相當于測試用例的過濾器,這次我們使用類似的思路來做一個對于像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

欄目分類
最近更新