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

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

Susan Sarandon
發布: 2024-11-28 04:38:11
原創
413 人瀏覽過

How to Remove ANSI Escape Sequences from a String in Python?

從Python 中的字符串中刪除ANSI 轉義序列

問題:

你有一個包含ANSI 轉義序列的字串,例如SSH 指令中用於顏色突出顯示的字串。這些序列會幹擾程式的功能,您需要刪除它們才能取得底層文字。

解:

從程式中刪除 ANSI 轉義序列的一種有效方法string就是使用正規表示式。 Python 的 re 模組提供了 sub() 方法,可以用空字串替換匹配的序列。

import re

ansi_escape = re.compile(r'\x1B(?:[@-Z\-_]|\[[0-?]*[ -/]*[@-~])')
cleaned_string = ansi_escape.sub('', original_string)
登入後複製

此正規表示式符合所有 7 位元 ANSI C1 轉義序列。它捕獲以轉義字元 (ESC) 開頭、後跟控製字元的兩位元組序列或表示控製字元的單一 8 位元位元組。透過用空字串替換這些匹配項,sub() 方法可以有效地刪除 ANSI 序列。

壓縮版本:

cleaned_string = re.sub(r'\x1B(?:[@-Z\-_]|\[[0-?]*[ -/]*[@-~])', '', original_string)
登入後複製

範例:

鑑於以下情況string:

ls\r\n\x1b[00m\x1b[01;31mexamplefile.zip\x1b[00m\r\n\x1b[01;31m
登入後複製

使用上面的正規表示式,得到清理後的字串:

ls\r\nexamplefile.zip\r\n
登入後複製

附加說明:

  • 正規表示式涵蓋所有7 位元ANSI C1 轉義序列,但不包含 8 位元 C1 轉義序列
  • 如果需要處理 8 位元程式碼,則需要稍微複雜的正規表示式。
  • 有關 ANSI 轉義碼的更多信息,請參閱 Wikipedia 上的 ANSI 轉義碼概述或 ECMA-48 標準。

以上是如何從 Python 字串中刪除 ANSI 轉義序列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板