python - 使用 Python 删除控制字符
问题描述
我有一个处理命令输出的脚本(aws help cli 命令)。
我逐行遍历输出,直到遇到文本“可用命令”时才开始实际的真正解析,此时我将标志设置为 true 并开始对每一行进行进一步处理。
我已经很好地工作了 - 但在 Ubuntu 上,我们遇到了一个问题:CLI以我以前从未见过的方式突出显示文本:
输出很长,所以我已经 grep 了有问题的特定行 - 见下文:
># aws ec2 help | egrep '^A'
>AVAILABLE COMMANDS
># aws ec2 help | egrep '^A' | cat -vet
>A^HAV^HVA^HAI^HIL^HLA^HAB^HBL^HLE^HE C^HCO^HOM^HMM^HMA^HAN^HND^HDS^HS$
我以前从未见过的是,每个被高亮显示的字母都是 X^HX 格式。我想应用 X^HX --> X 类型的简单转换(适用于所有 a-zA-Z)。
到目前为止我尝试了什么:我的解决方法是这样的 - 首先我删除这样的控制字符:
String = re.sub(r'[\x00-\x1f\x7f-\x9f]','',String)
但我仍然必须搜索完全丑陋的“AAVVAAIILLAABBLLEE”。我考虑使用进一步的正则表达式将双打变成单打,但这会捕捉到真正的双打并变得混乱。
我开始编写一个函数,该函数在构建的字母字符列表中进行迭代,以按描述进行翻译,我使用 hexdump 试图找出有问题的控制字符的确切 \x 代码,但无法使其工作 - 我可以删除H 但不是 ^。
我真的不想使用任何额外的模块,因为我想让人们可以使用它而不必安装额外的东西。总之,我有一个非常难看的解决方法,但我相信有人必须知道一种快速简单的方法来进行这种翻译。奇怪的是它似乎只出现在 Ubuntu 上。
解决方案
在进一步研究之后,我能够制定一个解决方案:
from string import ascii_lowercase
from string import ascii_uppercase
def RemoveUbuntuHighlighting(String):
for Char in ascii_uppercase + ascii_lowercase:
Match = Char + '\x08' + Char
String = re.sub(Match,Char,String)
return(String)
看到以格式 (X\x08X) 突出显示的字符时,我仍然有点困惑,这种排列似乎确实不必要地重复了相同的信息。
我建议不熟悉阅读十六进制代码的人的另一件事是,每一对十六进制都根据它们的出现顺序交换。
推荐阅读
- c# - 组合数据库中两个表的数据以获得总和(C#)
- python - 试图将一个字符串拆分成一个列表,将列表的顺序颠倒,然后打印出颠倒后的字符串
- laravel - SQLSTATE [42S22]:未找到列:1054“字段列表”中的未知列
- php - 在codeigniter上重命名文件后如何修复错误循环
- go - 重新分配切片参数的行为不同
- c# - WriteConsoleOutput 间距错误
- batch-file - 使用 windows cmd 或批处理脚本根据条形码重命名文件
- java - 重绘方法不是重绘视图
- java - NoSuchMethodError:akka.actor.LocalActorRefProvider.log()Lakka/event/LoggingAdapter
- r - 使 libuv 失败 AF_LINK | R,赛格温