gpt4 book ai didi

python - 将格式化控制字符(退格和回车)应用于字符串,无需递归

转载 作者:行者123 更新时间:2023-12-01 05:02:05 31 4
gpt4 key购买 nike

“解释”字符串中的格式化控制字符的最简单方法是什么,以像打印一样显示结果。为简单起见,我假设字符串中没有换行符。

例如,

>>> 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com