Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの文字列からANSIエスケープシーケンスを削除する方法

Pythonの文字列からANSIエスケープシーケンスを削除する方法

ターミナル上でテキストに色をつける際などに使われるANSIエスケープシーケンスは、ログファイルやコマンドの出力結果に混入すると、文字列の処理や解析の妨げになることがあります。

Pythonでは、正規表現(regex)を使うことで、こうしたエスケープシーケンスを簡単に取り除けます。手順はシンプルで、reモジュールのre.sub()関数を使い、エスケープシーケンスにマッチした部分を空文字列('')に置き換えるだけです。

ANSIエスケープシーケンスを削除するための正規表現

以下の正規表現パターンが、ANSIエスケープシーケンスの検出と削除に利用できます。

(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]

このパターンは、ESC(\x1B)またはCSI(\x9B)で始まる制御シーケンス全体にマッチするよう設計されています。

サンプルコード

実際に、色情報を含む文字列からエスケープシーケンスを除去してみましょう。

import re

def escape_ansi(line):
    ansi_escape = re.compile(r'(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]')
    return ansi_escape.sub('', line)

print(escape_ansi(line='\t\u001b[0;35mSomeText\u001b[0m\u001b[0;36m172.18.0.2\u001b[0m'))

実行結果

'\tSomeText                    172.18.0.2'

実行結果を見ると、元の文字列に含まれていたカラーコードなどのエスケープシーケンス(\u001b[0;35m\u001b[0m など)がすべて除去され、テキスト部分とタブ・スペースだけが残っていることがわかります。

ポイントまとめ

  • re.compile()で正規表現パターンを事前にコンパイルしておくと、繰り返し処理の際に高速化できます。
  • raw文字列(r'')を使うことで、バックスラッシュのエスケープ処理を気にせずパターンを記述できます。
  • より複雑なケースに対応したい場合は、パターンを拡張するか、専用ライブラリの活用も検討するとよいでしょう。
  1. 【初心者向け】Pythonでリストから要素を削除する4つの方法|pop()・remove()・del・clear()の使い方

    Pythonのリスト(list)は線形データ構造の一つで、要素が連続したメモリ領域に格納され、各要素にはインデックスを使ってアクセスできます。 プログラミングをしていると、リストから特定の要素を削除したい場面によく出会います。Pythonにはそのための組み込み機能がいくつか用意されており、目的に応じて使い分けることが大切です。この記事では、代表的な4つの方法「pop()」「remove()」「del」「clear()」をコード例とともに解説します。 1. pop():インデックスを指定して削除する pop() は、引数として渡したインデックス位置にある要素を削除します。さらに、削除された要素を

  2. 【Python】Tkinterでラベルのテキストを削除する方法をわかりやすく解説

    Tkinterは、PythonでGUIベースのアプリケーションを作成・開発するための標準ライブラリです。この記事では、何らかのテキストが表示されているラベルから、そのテキストを削除する方法を解説します。 ラベルからテキストを削除するには、ラベルの表示を切り替えるトリガーとして機能するボタンを作成します。具体的には、config()メソッドを使ってラベルのtext属性を空の文字列に書き換えます。 サンプルコード # Tkinterライブラリをインポート from tkinter import * # tkinterフレームのインスタンスを作成 win = Tk() # ウィンドウのサイズを