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

Python 将带转义符的字符串转换为不带转义符的字符串,python,escaping,Python,Escaping,我正在Python中进行exercism.io练习,其中一个测试要求我将带有转义字符的SGF值转换为不带转义字符的SGF值。然而,我不知道他们为什么不改变换行符 input\u val=“\\]b\nc\nd\t\te\n\\]” 输出\u val=“]b\nc\nd e\n]” 我尝试了一些编解码器和ats功能,但都没有用。有什么建议吗?提前感谢。您可以使用以下代码: def no_escapes(text): # get text argument # get a list of

我正在Python中进行exercism.io练习,其中一个测试要求我将带有转义字符的SGF值转换为不带转义字符的SGF值。然而,我不知道他们为什么不改变换行符

input\u val=“\\]b\nc\nd\t\te\n\\]”
输出\u val=“]b\nc\nd e\n]”

我尝试了一些编解码器和ats功能,但都没有用。有什么建议吗?提前感谢。

您可以使用以下代码:

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

您练习的目的不清楚,但解决方案很简单:

input_val.replace("\\", "").replace("\t", " ")

在研究了SGF文本值规则后,我提出了这个解决方案,该规则说,“除换行符外,所有空格都变成空格。”。奇怪的是,它并没有说“\\”字符应该被删除。不知道有没有更干净的方法

s = '\\]b\nc\nd\t\te \n\\]'

r = re.sub(r'[^\S\n]', ' ', s).replace(r'\\', '')

print(r)
# ']b\nc\nd  e \n]'

谢谢你的建议!你知道如何在中间转换“T”字符吗?<代码> \' < /代码>?这是什么意思?我还要加上:D
print(f'{no_escapes('\\yeet\nlol\\\\')!r}')
给了我语法错误。我认为
print(repr(string))
更显式、更可读。。。但它现在确实起作用了。嗯,这是真的:),为什么?我看不到任何与你的输入相似的东西。阿马丹:是的,就是这样。它位于该练习的测试文件中。感谢您的评论。基于SGF文本格式规则,我还找到了一个使用re.sub的解决方案。如果您有时间,请告诉我您的想法。这里不需要
re.sub
。你不能做得比替换更好。我认为
\\[
应该与
\\]
匹配。如果这些代码之间可能出现“\”,则此解决方案不可靠。两者都没有使用正则表达式。我想这是exercism的错,因为它没有包含一个测试用例来涵盖这一点。