首頁  >  文章  >  後端開發  >  如何從 Python 字串中刪除 ANSI 轉義序列?

如何從 Python 字串中刪除 ANSI 轉義序列?

Barbara Streisand
Barbara Streisand原創
2024-11-23 08:47:11431瀏覽

How to Remove ANSI Escape Sequences from Python Strings?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn