Python開發(fā)之利用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題目給的代碼復制下來的,這是一個結(jié)構(gòu)體的定義,語言是c++,對于這種塊注釋我們把它放在visual studio 2022 中,使用取消注釋時,這些*還會保留,有時候一個個清除過于麻煩。所以,我們可以利用python的re模塊實現(xiàn)對這種討厭注釋塊的過濾,保留像結(jié)構(gòu)體這種有意義的信息。
知識點
基本上和上次差不多,這里再簡單回顧一下。
re
re模塊主要是python 中集成正則表達式的模塊,功能主要是字符串的匹配。
這里用到了三個re函數(shù)
re.complie(): 生成正則表達式對象
re.sub():將指定內(nèi)容替換
re.search(): 查找函數(shù),在字符串中查找第一個符合正則表達式對象的子串。
文件
除了re外,還使用到文件的一些操作,之前我們對于清空文件內(nèi)容采取的方法是使用先以只讀模式讀取內(nèi)容,然后關(guān)閉文件,再以寫的方式打開,由于只寫的方式會自動將內(nèi)容清空的特性,自動實現(xiàn)該特點后再將內(nèi)容寫入。這次對于清空,我們采取一個新的操作。
我們可以以 r+ 模式打開文件,并在讀取完后,使用truncate()函數(shù)實現(xiàn)對文件內(nèi)容清空。
核心代碼
正則表達式對象,第一行是塊注釋的一些特征
pattern = re.compile(r'/\*{0,2}| \* | \*/') white = re.compile(r'\S')
識別開頭的/* 或者*并替換,以及跳過多余的空白行。
# 由于只針對開頭,只能使用一次匹配 line = pattern.sub("", line, 1) # 忽略空白行 if white.search(line): ans += line + "\n"
操作流程
我們先將內(nèi)容用記事本保存。
然后在pycharm 中運行我們程序,當然要先傳入文件地址。
然后再打開文件,我們就會發(fā)現(xiàn)文件內(nèi)容方式了更改。
這里不知道什么原因,居然把那個Defintion去掉了,看了代碼也沒懂,有機會再研究一下。
其實是再第一行末位了哈哈哈。
code(Python)完整
import re # 去除塊注釋 def rem_block_ann(filepath): """ 該函數(shù)用于去除討厭的塊注釋 :param filepath: 文件路徑,txt文件 :return: """ pattern = re.compile(r'/\*{0,2}| \* | \*/') white = re.compile(r'\S') # 打開文件 file = open(path, 'r+') # 先將內(nèi)容分行存入列表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)
不擺了。
總結(jié)
到此這篇關(guān)于Python開發(fā)之利用re模塊去除代碼塊注釋的文章就介紹到這了,更多相關(guān)Python去除代碼塊注釋內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄
這篇文章主要為大家介紹了Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄應用程序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08Python實現(xiàn)輸出程序執(zhí)行進度百分比的方法
這篇文章主要介紹了Python實現(xiàn)輸出程序執(zhí)行進度百分比的方法,涉及Python數(shù)值運算與系統(tǒng)輸出相關(guān)操作技巧,需要的朋友可以參考下2017-09-09python實現(xiàn)Scrapy爬取網(wǎng)易新聞
這篇文章主要介紹了python實現(xiàn)Scrapy爬取網(wǎng)易新聞,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03Python編程中使用Pillow來處理圖像的基礎(chǔ)教程
這篇文章主要介紹了Python編程中使用Pillow來處理圖像的基礎(chǔ)教程,Pillow和PIL都是Python下十分強大的圖片處理利器,朋友可以參考下2015-11-11互斥鎖解決 Python 中多線程共享全局變量的問題(推薦)
這篇文章主要介紹了互斥鎖解決 Python 中多線程共享全局變量的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09tensorflow入門:TFRecordDataset變長數(shù)據(jù)的batch讀取詳解
今天小編就為大家分享一篇tensorflow入門:TFRecordDataset變長數(shù)據(jù)的batch讀取詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01PySpark與GraphFrames的安裝與使用環(huán)境搭建過程
這篇文章主要介紹了PySpark與GraphFrames的安裝與使用教程,本文通過圖文并茂實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02