網站首頁 編程語言 正文
前言
上次做了用于輸入樣例格式修改,相當于測試用例的過濾器,這次我們使用類似的思路來做一個對于像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
相關推薦
- 2022-10-13 python中arrow庫用法大全_python
- 2022-07-29 Python控制線程和函數超時處理_python
- 2022-11-29 詳解Go語言設計模式之單例模式_Golang
- 2024-03-23 asp.net web api 用戶身份驗證
- 2022-08-12 C++鏈表實現通訊錄設計_C 語言
- 2022-11-30 C++之值傳遞&指針傳遞&引用傳遞的示例詳解_C 語言
- 2022-08-04 GoFrame框架gset交差并補集使用實例_Golang
- 2022-02-28 CommonsChunkPlugin 插件使用方法 、 出現報錯 : Error: webpa
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支