regex将控制台代码替换为空白



我正在为使用控制台代码的控制台应用程序编写一些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'

相关内容

  • 没有找到相关文章

最新更新