我正在为使用控制台代码的控制台应用程序编写一些Python测试,并且我在优雅地处理ESC H
序列时遇到了一些问题。
我有s = r'x1b[12;5HnSomething'
输入字符串,我想用Something
代替它。我正在尝试使用以下正则表达式:
re.sub(r'x1b[([0-9,A-Z]{1,2};([0-9]{1,2})H)', r'2', s)
这当然会创建5Something
。
我想要的是类似
的东西re.sub(r'x1b[([0-9,A-Z]{1,2};([0-9]{1,2})H)', ' '*(int(r'2')-1), s)
表示创建比第二个捕获组的空格数少1个。
如果有一种方法可以简单地在字符串中呈现我使用print(s)
时得到的内容,我也会非常高兴:
Something
我正在使用Python 3.
非常感谢!
使用
import re
s = r'x1b[12;5HnSomething'
pattern = r'\x1b[[0-9A-Z]{1,2};([0-9]{1,2})H\n'
print(re.sub(pattern, lambda x: ' '*(int(x.group(1))-1), s))
参见Python证明。参见正则表达式的证明。
--------------------------------------------------------------------------------
\ ''
--------------------------------------------------------------------------------
x1b 'x1b'
--------------------------------------------------------------------------------
[ '['
--------------------------------------------------------------------------------
[0-9A-Z]{1,2} any character of: '0' to '9', 'A' to 'Z'
(between 1 and 2 times (matching the most
amount possible))
--------------------------------------------------------------------------------
; ';'
--------------------------------------------------------------------------------
( group and capture to 1:
--------------------------------------------------------------------------------
[0-9]{1,2} any character of: '0' to '9' (between 1
and 2 times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of 1
--------------------------------------------------------------------------------
H 'H'
--------------------------------------------------------------------------------
\ ''
--------------------------------------------------------------------------------
n 'n'