Python開發(fā)之利用re模塊去除代碼塊注釋
前言
上次做了用于輸入樣例格式修改,相當(dāng)于測(cè)試用例的過濾器,這次我們使用類似的思路來做一個(gè)對(duì)于像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題目給的代碼復(fù)制下來的,這是一個(gè)結(jié)構(gòu)體的定義,語言是c++,對(duì)于這種塊注釋我們把它放在visual studio 2022 中,使用取消注釋時(shí),這些*還會(huì)保留,有時(shí)候一個(gè)個(gè)清除過于麻煩。所以,我們可以利用python的re模塊實(shí)現(xiàn)對(duì)這種討厭注釋塊的過濾,保留像結(jié)構(gòu)體這種有意義的信息。
知識(shí)點(diǎn)
基本上和上次差不多,這里再簡(jiǎn)單回顧一下。
re
re模塊主要是python 中集成正則表達(dá)式的模塊,功能主要是字符串的匹配。
這里用到了三個(gè)re函數(shù)
re.complie(): 生成正則表達(dá)式對(duì)象
re.sub():將指定內(nèi)容替換
re.search(): 查找函數(shù),在字符串中查找第一個(gè)符合正則表達(dá)式對(duì)象的子串。
文件
除了re外,還使用到文件的一些操作,之前我們對(duì)于清空文件內(nèi)容采取的方法是使用先以只讀模式讀取內(nèi)容,然后關(guān)閉文件,再以寫的方式打開,由于只寫的方式會(huì)自動(dòng)將內(nèi)容清空的特性,自動(dòng)實(shí)現(xiàn)該特點(diǎn)后再將內(nèi)容寫入。這次對(duì)于清空,我們采取一個(gè)新的操作。
我們可以以 r+ 模式打開文件,并在讀取完后,使用truncate()函數(shù)實(shí)現(xiàn)對(duì)文件內(nèi)容清空。
核心代碼
正則表達(dá)式對(duì)象,第一行是塊注釋的一些特征
pattern = re.compile(r'/\*{0,2}| \* | \*/')
white = re.compile(r'\S')
識(shí)別開頭的/* 或者*并替換,以及跳過多余的空白行。
# 由于只針對(duì)開頭,只能使用一次匹配
line = pattern.sub("", line, 1)
# 忽略空白行
if white.search(line):
ans += line + "\n"
操作流程
我們先將內(nèi)容用記事本保存。

然后在pycharm 中運(yùn)行我們程序,當(dāng)然要先傳入文件地址。
然后再打開文件,我們就會(huì)發(fā)現(xiàn)文件內(nèi)容方式了更改。

這里不知道什么原因,居然把那個(gè)Defintion去掉了,看了代碼也沒懂,有機(jī)會(huì)再研究一下。
其實(shí)是再第一行末位了哈哈哈。
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:
# 由于只針對(duì)開頭,只能使用一次匹配
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python使用requests.post方法傳遞form-data類型的Excel數(shù)據(jù)的示例代碼
這篇文章介紹了python使用requests.post方法傳遞form-data類型的Excel數(shù)據(jù)的示例代碼,某些post接口,需要發(fā)送multipart/form-data類型的數(shù)據(jù),如何使用python requests來模擬這種類型的請(qǐng)求發(fā)送呢?補(bǔ)充講解了python使用requests post請(qǐng)求發(fā)送form-data類型數(shù)據(jù),一起看看吧2024-01-01
Python單元測(cè)試工具doctest和unittest使用解析
這篇文章主要介紹了Python單元測(cè)試工具doctest和unittest使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Python腳本實(shí)現(xiàn)自動(dòng)登錄校園網(wǎng)
今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識(shí),文章圍繞著如何使用Python腳本實(shí)現(xiàn)自動(dòng)登錄校園網(wǎng)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
vscode 配置 python3開發(fā)環(huán)境的方法
這篇文章主要介紹了vscode 配置 python3開發(fā)環(huán)境的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
TensorFlow神經(jīng)網(wǎng)絡(luò)構(gòu)造線性回歸模型示例教程
這篇文章主要為大家介紹了TensorFlow構(gòu)造線性回歸模型示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
Python構(gòu)建XML樹結(jié)構(gòu)的方法示例
這篇文章主要介紹了Python構(gòu)建XML樹結(jié)構(gòu)的方法,結(jié)合實(shí)例形式分析了Python創(chuàng)建與打印xml數(shù)結(jié)構(gòu)的實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
6個(gè)實(shí)用的Python自動(dòng)化腳本詳解
每天你都可能會(huì)執(zhí)行許多重復(fù)的任務(wù),例如閱讀 pdf、播放音樂、查看天氣、打開書簽、清理文件夾等等,使用自動(dòng)化腳本,就無需手動(dòng)一次又一次地完成這些任務(wù),非常方便??旄S小編一起試一試吧2022-01-01

