我正在Python中进行exercism.io练习,其中一项测试要求我将带有转义字符的SGF值转换为不包含转义字符的SGF值。我不知道为什么它们会保留换行符。
input_val = "\\]b\nc\nd\t\te \n\\]"
output_val = "]b\nc\nd e \n]"
我尝试了一些编解码器和ats函数,但无济于事。有什么建议么?预先感谢。
答案 0 :(得分:2)
锻炼的目的尚不清楚,但解决方案很简单:
input_val.replace("\\", "").replace("\t", " ")
答案 1 :(得分:0)
您可以使用以下代码:
def no_escapes(text): # get text argument
# get a list of strings split with \ and join them together without it
text = text.split('\\')
text = [t.split('\t') for t in text]
text = [i for t in text for i in t]
return ''.join(text)
它将首先将"\\]b\nc\nd\t\te \n\\]"
变成["]b\nc\nd\te \n"]
。然后它将变成[["]b\nc\nd", "e \n"]]
。接下来,将其压平成["]b\nc\nd", "e \n"]
,并将它们连接在一起,而在字符串之间没有任何内容,因此您将得到"]b\nc\nd e \n]"
示例:
>>> print(no_escapes('\\yeet\nlol\\'))
yeet
lol
如果想要原始的话:
>>> string = no_escapes('\\yeet\nlol\\')
>>> print(f'{string!r}')
yeet\nlol
答案 2 :(得分:0)
在查看了SGF文本值规则here后,“除换行符外的所有空白均变为空格”,我想到了这种解决方案。奇怪的是,它没有说应该删除'\\'字符。不确定是否有更清洁的方法可以做到这一点?
s = '\\]b\nc\nd\t\te \n\\]'
r = re.sub(r'[^\S\n]', ' ', s).replace(r'\\', '')
print(r)
# ']b\nc\nd e \n]'