我有一个python脚本试图解释写入和读取stdout和stdin分别的数据跟踪。问题是这个数据充斥着我不关心的ANSI转义。这些转义符是JSON编码的,因此它们看起来像“\ 033 [A”和“\ 033] 0;”。我实际上并不需要解释代码,但我需要知道每个代码中包含多少个字符(您会注意到第一个序列是6个字符,而第二个是7)。有没有一种简单的方法可以从我拥有的字符串中筛选出这些代码?过滤出ANSI转义序列
5
A
回答
0
这是远远不够完善,但是这正则表达式可以让你somwhere:
import re
text = r'begin \033[A middle \033]0; end'
print re.sub(r'\\[0-9]+(\[|\])[0-9]*;?[A-Z]?', '', text)
它已经正确地删除你的两个例子。
0
FWIW,这个Python正则表达式似乎适用于我。我真的不知道,如果它是准确的,但经验似乎工作:
r'\\033[\[\]]([0-9]{1,2}([;@][0-9]{0,2})*)*[mKP]?'
1
#!/usr/bin/env python
import re
ansi_pattern = '\033\[((?:\d|;)*)([a-zA-Z])'
ansi_eng = re.compile(ansi_pattern)
def strip_escape(string=''):
lastend = 0
matches = []
newstring = str(string)
for match in ansi_eng.finditer(string):
start = match.start()
end = match.end()
matches.append(match)
matches.reverse()
for match in matches:
start = match.start()
end = match.end()
string = string[0:start] + string[end:]
return string
if __name__ == '__main__':
import sys
import os
lname = sys.argv[-1]
fname = os.path.basename(__file__)
if lname != fname:
with open(lname, 'r') as fd:
for line in fd.readlines():
print strip_escape(line).rstrip()
else:
USAGE = '%s <filename>' % fname
print USAGE
6
另一个变化:
def strip_ansi_codes(s):
"""
>>> import blessings
>>> term = blessings.Terminal()
>>> foo = 'hidden'+term.clear_bol+'foo'+term.color(5)+'bar'+term.color(255)+'baz'
>>> repr(strip_ansi_codes(foo))
u'hiddenfoobarbaz'
"""
return re.sub(r'\x1b\[([0-9,A-Z]{1,2}(;[0-9]{1,2})?(;[0-9]{3})?)?[m|K]?', '', s)
7
的控制序列(也称为ANSI转义序列)完整的正则表达式是
/(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]/
1
这为我工作:
re.sub(r'\x1b\[[\d;]+m', '', s)
相关问题
- 1. ANSI转义序列
- 2. Ansi转义序列作为字节
- 3. 马车ANSI转义序列提示
- 4. ANSI转义序列在Cygwin中失败
- 5. ANSI转义序列不打印到Windows上的标准输出
- 6. 在QProcess输出中保留ANSI转义序列
- 7. 使用PHP将ANSI转义序列转换为HTML
- 8. 在没有ANSI转义纯文本登录红宝石输出序列
- 9. 运行Ruby脚本以输出到Geektool时,ANSI转义序列消失
- 10. Awk:使用ANSI转义序列的字符串否定
- 11. ansi转义序列在Windows cmd提示下不起作用
- 12. PuTTy是否可以正确使用ANSI/VT100转义序列?
- 13. 如何让win32控制台识别ANSI/VT100转义序列?
- 14. 用于ANSI VT100转义序列的标准C标题
- 15. 上标和下标是否有Ansi转义序列?
- 16. Ansi转义序列和重定向:意外的行为
- 17. PyCharm调试器控制台ANSI转义序列
- 18. 读取设备状态报告ANSI转义序列回复
- 19. 过滤序列
- 20. 过滤器序列
- 21. Ruby:转义转义序列?
- 22. 过滤列表序列
- 23. 转义序列
- 24. 添加过滤器列出
- 25. 通过Ruby Telnet发送转义序列
- 26. PyQt5 unicode translation:pylupdate5输出转义序列
- 27. 在Windows上输出转义序列
- 28. 寻找支持ANSI转义码的UserControl
- 29. 从终端读取ANSI转义
- 30. ANSI转义代码在GNU Smalltalk中
的'colcrt'程序已经这样做了。它不在Python中,但如果这是一个需求,它可能被移植或封装。 – tripleee