在Python 字串中剝離ANSI 轉義序列
許多命令列工具和SSH 應用程式將ANSI 轉義序列附加到其輸出中以控制終端行為並增強視覺呈現。但是,當您想要在沒有視覺提示的情況下解析或處理字串內容時,這些序列可能會很麻煩。本文探討了一種 Pythonic 方法來刪除此類轉義序列並提取純文字內容。
問題:
考慮從 SSH 指令擷取的以下範例字串:
'ls\r\n\x1b[00m\x1b[01;31mexamplefile.zip\x1b[00m\r\n\x1b[01;31m'
目標是以程式設計方式刪除 ANSISI轉義序列,只留下明文內容:
'examplefile.zip'
解:
Python 的正規表示式模組為這個問題提供了簡潔的解決方案。以下正規表示式有效擷取並刪除所有ANSI 轉義序列:
import re ansi_escape = re.compile(r''' \x1B # ESC (?: # 7-bit C1 Fe (except CSI) [@-Z\-_] | # or [ for CSI, followed by a control sequence \[ [0-?]* # Parameter bytes [ -/]* # Intermediate bytes [@-~] # Final byte ) ''', re.VERBOSE)
套用正規表示式並擷取所需文字:
import re ansi_escape = re.compile(r'\x1B(?:[@-Z\-_]|\[[0-?]*[ -/]*[@-~])') sometext = 'ls\r\n\x1b[00m\x1b[01;31mexamplefile.zip\x1b[00m\r\n\x1b[01;31m' result = ansi_escape.sub('', sometext)
輸出:
'ls\r\nexamplefile.zip\r\n'
以上是如何從 Python 字串中刪除 ANSI 轉義序列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!