首页  >  文章  >  后端开发  >  如何从 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 转义序列附加到其输出中以控制终端行为并增强视觉呈现。但是,当您想要在没有视觉提示的情况下解析或处理字符串内容时,这些序列可能会很麻烦。本文探讨了一种 Pythonic 方法来删​​除此类转义序列并提取纯文本内容。

问题:

考虑从 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn