1
coloramaを使用してANSIコードをテキストに追加すると、ANSIカラーコードをテキストから分割してテキストを列フォーマットで印刷できるようにする必要があります。次の式は、単一のカラーコードをテキストから分離しますが、ダブルコードは分離しません。ANSIエスケープ文字をテキストから分離するための正規表現
# adapted from https://stackoverflow.com/questions/2186919
split_ANSI_escape_sequences = re.compile(r"""
(?P<col>
\x1b # literal ESC
\[ # literal [
[;\d]* # zero or more digits or semicolons
[A-Za-z] # a letter
)*
(?P<text>.*)
""", re.VERBOSE).fullmatch
def split_ANSI(s):
return split_ANSI_escape_sequences(s).groupdict()
これが結果です:
>>> split_ANSI('\x1b[31m\x1b[1mtext')
{'col': '\x1b[1m', 'text': 'text'}
それは正しく分割しますが、フォーマット情報を失います。私は期待している
{'col': '\x1b[31m\x1b[1m', 'text': 'text'}
結果として。
最初のグループのすべての潜在的なエスケープシーケンスを取得するにはどうすればよいですか?
希望の出力は何ですか? – martineau
{'col': '\ x1b [31m \ x1b [1m'、 'text': 'text'} –
あなたの質問を編集して追加してください。 – martineau