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