“解释”字符串中的格式化控制字符的最简单方法是什么,以像打印一样显示结果。为简单起见,我假设字符串中没有换行符。
例如,
>>> sys.stdout.write('foo\br')
显示为
,因此
interpret('foo\br')
应该是 'for'
>>>sys.sdtout.write('foo\rbar')
显示栏
,因此
interpret('foo\rbar')
应该是 'bar'
我可以在这里编写正则表达式替换,但是,在 '\b'
替换的情况下,必须递归应用它,直到不再出现。如果不使用递归的话会非常复杂。
有没有更简单的方法?
最佳答案
如果效率不重要,一个简单的堆栈就可以很好地工作:
string = "foo\rbar\rbash\rboo\b\bba\br"
res = []
for char in string:
if char == "\r":
res.clear()
elif char == "\b":
if res: del res[-1]
else:
res.append(char)
"".join(res)
#>>> 'bbr'
否则,我认为这与您在复杂情况下所希望的速度一样快:
string = "foo\rbar\rbash\rboo\b\bba\br"
try:
string = string[string.rindex("\r")+1:]
except ValueError:
pass
split_iter = iter(string.split("\b"))
res = list(next(split_iter, ''))
for part in split_iter:
if res: del res[-1]
res.extend(part)
"".join(res)
#>>> 'bbr'
请注意,我没有对此进行计时。
关于python - 将格式化控制字符(退格和回车)应用于字符串,无需递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25878223/