Python 如何将包含控制字符的字符串转换为应用了控制字符的字符串?

Python 如何将包含控制字符的字符串转换为应用了控制字符的字符串?,python,Python,我需要获得以下字符串,就像它是使用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\r 1234' 结果: str='5678\n1234' 这确实提供了您想要的输出。在python中 在javascript中 这将至少处理\b和\r,但它不是您可能遇到的任何控制序列的通用解决方

我需要获得以下字符串,就像它是使用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\r 1234' 结果:

str='5678\n1234' 这确实提供了您想要的输出。

在python中

在javascript中


这将至少处理\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


很抱歉用俄语写。第二个示例的输出与退格的位置不匹配。我想产量会很高12356123@Haem,否,输出:'5678\n'尝试:str='1234\b\b\b\b\r5678\n'printstrI请参阅。我没有意识到\r会将光标返回到当前行的开头。该代码可能会重复,是应用退格字符,还是删除它们?此外,编写的正则表达式将删除空格,如果输入是abcc\b如果您当前的代码将输出def而不是预期的abcdef不幸的是,这不适用于这种情况:给定以下函数:given_string='1234\b\r5678\r5678\nqwert\b\b\b\r1234\n它可以按需要工作。不幸的是,这不适用于这种情况:给定\u string='1234\b\r5678\nqwert\b\b\b\b\b\b\r1234'结果应该是:new \u string='5678\n1234'对我来说,它在将convert\u to \u termstr更改为convert\u to \u termstr后工作。我得到一个9字符的字符串,看起来就像5678\n1234代码已经编辑过了,现在它返回的是\n
"1234\b\r5678\nqwert\b\b\b\b\b\b\b\b\r1234".replace(/[^\w\n]/gi,"").replace(/[a-z]/gi,"")
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