正则表达式用空格替换控制台代码
regex to replace console code with whitespaces
我正在为使用 console codes 的控制台应用程序编写一些 Python 测试,但我在优雅地处理 ESC H
序列时遇到了一些问题。
我有 s = r'\x1b[12;5H\nSomething'
输入字符串,我想用 Something
替换它。我正在尝试使用以下正则表达式:
re.sub(r'\x1b\[([0-9,A-Z]{1,2};([0-9]{1,2})H)', r'', s)
这当然会创建 5Something
。
我要的是
效果的东西
re.sub(r'\x1b\[([0-9,A-Z]{1,2};([0-9]{1,2})H)', ' '*(int(r'')-1), s)
也就是创建比第二个捕获组的空格数少一个
如果有一种方法可以简单地在字符串中呈现我在使用 print(s)
时得到的内容,我也会很高兴:
Something
我正在使用 Python 3.
非常感谢!!
使用
import re
s = r'\x1b[12;5H\nSomething'
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 proof. See a regex proof。
解释
--------------------------------------------------------------------------------
\ '\'
--------------------------------------------------------------------------------
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 :
--------------------------------------------------------------------------------
[0-9]{1,2} any character of: '0' to '9' (between 1
and 2 times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
H 'H'
--------------------------------------------------------------------------------
\ '\'
--------------------------------------------------------------------------------
n 'n'
我正在为使用 console codes 的控制台应用程序编写一些 Python 测试,但我在优雅地处理 ESC H
序列时遇到了一些问题。
我有 s = r'\x1b[12;5H\nSomething'
输入字符串,我想用 Something
替换它。我正在尝试使用以下正则表达式:
re.sub(r'\x1b\[([0-9,A-Z]{1,2};([0-9]{1,2})H)', r'', s)
这当然会创建 5Something
。
我要的是
效果的东西re.sub(r'\x1b\[([0-9,A-Z]{1,2};([0-9]{1,2})H)', ' '*(int(r'')-1), s)
也就是创建比第二个捕获组的空格数少一个
如果有一种方法可以简单地在字符串中呈现我在使用 print(s)
时得到的内容,我也会很高兴:
Something
我正在使用 Python 3.
非常感谢!!
使用
import re
s = r'\x1b[12;5H\nSomething'
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 proof. See a regex proof。
解释
--------------------------------------------------------------------------------
\ '\'
--------------------------------------------------------------------------------
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 :
--------------------------------------------------------------------------------
[0-9]{1,2} any character of: '0' to '9' (between 1
and 2 times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
H 'H'
--------------------------------------------------------------------------------
\ '\'
--------------------------------------------------------------------------------
n 'n'