首页 > 后端开发 > Python教程 > 如何从 Python 字符串中删除 ANSI 转义序列?

如何从 Python 字符串中删除 ANSI 转义序列?

Susan Sarandon
发布: 2024-11-28 04:38:11
原创
355 人浏览过

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

从 Python 中的字符串中删除 ANSI 转义序列

问题:

你有一个包含 ANSI 转义序列的字符串,例如 SSH 命令中用于颜色突出显示的字符串。这些序列会干扰程序的功能,您需要删除它们才能获取底层文本。

解决方案:

从程序中删除 ANSI 转义序列的一种有效方法string就是使用正则表达式。 Python 的 re 模块提供了 sub() 方法,该方法可以用空字符串替换匹配的序列。

import re

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

此正则表达式匹配所有 7 位 ANSI C1 转义序列。它捕获以转义字符 (ESC) 开头、后跟控制字符的两字节序列或表示控制字符的单个 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板