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

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

Susan Sarandon
Susan Sarandon原創
2024-11-28 04:38:11380瀏覽

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