首页 > 解决方案 > 如何将包含控制字符的字符串转换为应用了控制字符的字符串?

问题描述

我需要获取以下字符串,就好像它是使用打印的一样print()

str = '1234\b\b\b\b\r5678\n'

我想为以下形式的输出 (str2) 行应用退格字符('\b'、'\r' 等):

str2 = '5678\n'

另一个例子:

str = '1234\b\r5678\nqwert\b\b\b\b\b\b\b\b\r1234'

结果:

str = '5678\n1234'

标签: python

解决方案


这将至少处理 \b 和 \r 但它不是您可能遇到的任何控制序列的通用解决方案

import re

def convert_to_term(str):
    """
    coverts \b (\x08) and \r as a printout to terminal would represent it
    """
    # \b backspace
    str = re.sub(r'.\x08', '', str)
    # \r carriage return
    str = re.sub(r'(^|\n)[^\n]+\r', r'\1', str)
    return str

in_str = '1234 \b \b \b \b \r5678 \n'
out_str = convert_to_term(in_str)
print ("\"" + out_str + "\"")
print (len(out_str))

in_str = '1234\b\r5678\nqwert\b\b\b\b\b\b\b\b\r1234'
out_str = convert_to_term(in_str)
print ("\"" + out_str + "\"")
print (len(out_str))

给出:

"5678 
"
6
"5678
1234"
9


推荐阅读