ホームページ >バックエンド開発 >Python チュートリアル >Python の文字列から ANSI エスケープ シーケンスを削除する方法

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 04:38:11355ブラウズ

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

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

問題:

SSH での色の強調表示に使用されるものなど、ANSI エスケープ シーケンスを含む文字列コマンド。これらのシーケンスはプログラムの機能を妨げるため、基になるテキストを取得するには削除する必要があります。

解決策:

ANSI エスケープ シーケンスをプログラムから削除する効果的な方法の 1 つ文字列には正規表現を使用します。 Python の re モジュールには、一致したシーケンスを空の文字列に置き換えることができる sub() メソッドが用意されています。

import re

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

この正規表現は、すべての 7 ビット ANSI C1 エスケープ シーケンスに一致します。エスケープ文字 (ESC) で始まり、その後に制御文字が続く 2 バイトのシーケンス、または制御文字を表す単一の 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 中国語 Web サイトの他の関連記事を参照してください。

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