将带转义的字符串转换为不带转义的字符串

时间:2019-01-07 01:23:18

标签: python escaping

我正在Python中进行exercism.io练习,其中一项测试要求我将带有转义字符的SGF值转换为不包含转义字符的SGF值。我不知道为什么它们会保留换行符。

input_val = "\\]b\nc\nd\t\te \n\\]" output_val = "]b\nc\nd e \n]"

我尝试了一些编解码器和ats函数,但无济于事。有什么建议么?预先感谢。

3 个答案:

答案 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]'