Python 文字列から ANSI エスケープ シーケンスを削除するには?

Barbara Streisand
リリース: 2024-11-23 08:47:11
オリジナル
429 人が閲覧しました

How to Remove ANSI Escape Sequences from Python Strings?

Python 文字列内の ANSI エスケープ シーケンスの削除

多くのコマンドライン ツールと SSH アプリケーションは、端末の動作を制御するために出力に ANSI エスケープ シーケンスを追加します。視覚的なプレゼンテーションを強化します。ただし、視覚的な手がかりなしで文字列コンテンツを解析または処理する場合、これらのシーケンスは面倒になる可能性があります。この記事では、このようなエスケープ シーケンスを削除し、プレーンテキストのコンテンツを抽出する Python のアプローチについて説明します。

問題:

SSH コマンドから取得された次の文字列の例を考えてみましょう:

'ls\r\n\x1b[00m\x1b[01;31mexamplefile.zip\x1b[00m\r\n\x1b[01;31m'
ログイン後にコピー

目的は、ANSI エスケープ シーケンスをプログラムで削除し、平文のみを残すことです。内容:

'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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート