用带反斜杠的字符串替换字符串

2024-04-25 08:10:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个程序,自动生成我的报告在乳胶,我必须转义特殊乳胶字符。基本上,每当我读$_%等时,我必须分别用\$\_\%替换它。你知道吗

我天真地尝试执行mystring.replace('$','\$'),但它添加了一个双反斜杠,如下所示:

my_text_to_parse = "$x^2+2\cdot x + 2 = 0$"
my_text_to_parse.replace('$','\$')
#=> "\\$x^2+2\cdot x + 2 = 0\\$"

有没有办法避免转义字符加倍?你知道吗


Tags: totext程序parsemy报告字符replace
2条回答

看到双反斜杠是因为得到的是字符串的representation,而不是输出。在表示中,它打印反斜杠,因为\是受保护的字符,因此必须转义。这是因为它用于特殊字符(例如\t\n),用法可能会混淆。。在实际打印或保存字符串时,应将这些双反斜杠正确打印为单个反斜杠。你知道吗

例如,比较

print('\')
# SyntaxError: EOL while scanning string literal

print('\\')
# \

在第一个字符串中,第二个引号由反斜杠转义。这说明了为什么通常不能在字符串中使用原始反斜杠。在第二个字符串中,第二个反斜杠由第一个字符串转义。这两个反斜杠被解释为一个反斜杠。你知道吗

print(repr('\\'))
# '\\'

但是第二个字符串的表示仍然显示两个反斜杠。此行为与其他特殊字符(如\n)相同,在这些特殊字符中可以更容易地看到问题。正如\n是表示line break的特殊字符一样,\\是表示single backslash的特殊字符。你知道吗

print('hi\nmom')
# hi
# mom

print(repr('hi\nmom'))
# 'hi\nmom'

要真正回答你的问题,你的方式应该是正确的,但你可能不想这样做。这是因为用'\$'创建一个字符串并不能明确这个转义问题。它似乎是一个特殊字符\$,就像\n是一个特殊字符一样,但是由于没有这样定义的字符,python解释器非常聪明,可以用双反斜杠替换单个反斜杠。但你一般不想依赖这种行为。你知道吗

更好的方法是用另一个反斜杠显式转义,或者使用raw string,其中不允许转义。所有这些都会得到相同的结果。你知道吗

s = '$x^2+2\\cdot x + 2 = 0$'

print(s.replace('$', '\$'))   # Technically works, but not as clear
# \$x^2+2\cdot x + 2 = 0\$

print(s.replace('$', '\\$'))  # Escaping the backslash
# \$x^2+2\cdot x + 2 = 0\$

print(s.replace('$', r'\$'))  # Using a raw string
# \$x^2+2\cdot x + 2 = 0\$
print re.sub(r"\$","\$",x)

你可以试试回复将给出预期的结果。你知道吗

相关问题 更多 >