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'
import re
def repeated_re_sub(pattern, sub, s, flags=re.U):
"""Match-and-replace repeatedly until we run out of matches..."""
patc = re.compile(pattern, flags)
sold = ''
while sold != s:
sold = s
print "patc=>%s< sold=>%s< s=>%s<" % (patc,sold,s)
s = patc.sub(sub, sold)
#print help(patc.sub)
return s
print repeated_re_sub('[^\b]\b', '', 'abc\b\x08de\b\bfg')
#print repeated_re_sub('.\b', '', 'abcd\b\x08e\b\bfg')
Python没有任何内置的或标准的库模块来实现这一点。 但是,如果您只关心简单的控制字符,如
\r
、\b
和\n
,则可以编写一个简单的函数来处理:您可以扩展函数来处理任何想要的控制字符。例如,您可能希望忽略一些在终端中没有实际显示的控制字符(例如,bell
\a
)如果效率无关紧要,那么简单的堆栈就可以了:
否则,我认为在复杂的情况下,这是你所希望的最快速度:
^{pr2}$请注意,我没有计时。在
更新:在询问了30分钟的说明和一个示例字符串之后,我们发现问题实际上完全不同:“如何对Python字符串重复应用格式化控制字符(backspace) 在这种情况下,显然需要反复应用regex/fn,直到停止获取匹配项。 解决方案:
[前面多次回答,要求澄清,并指出}都可用于非递归地解决问题。]
re.sub(...)
或{相关问题 更多 >
编程相关推荐