我有一個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