ホームページ  >  記事  >  バックエンド開発  >  Python 文字列から ANSI エスケープ シーケンスを削除するには?

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

Barbara Streisand
Barbara Streisandオリジナル
2024-11-23 08:47:11449ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。