Python 用带反斜杠的字符串替换字符串
我正在创建一个程序,自动生成LaTeX中的报告,在这里我必须转义特殊的LaTeX字符。基本上,每当我阅读Python 用带反斜杠的字符串替换字符串,python,string,Python,String,我正在创建一个程序,自动生成LaTeX中的报告,在这里我必须转义特殊的LaTeX字符。基本上,每当我阅读$或\或%等时,我必须分别用\$、\\\和\%来替换它 我天真地尝试执行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\\$" 有
$
或\
或%
等时,我必须分别用\$
、\\\
和\%
来替换它
我天真地尝试执行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\\$"
有没有办法避免转义字符加倍?您看到的是双反斜杠,因为您得到的是字符串的名称,而不是输出。在表示法中,它打印反斜杠,因为
\
是受保护的字符,因此必须转义。这是因为它用于特殊字符中(例如,\t
,\n
),用法可能会混淆。。实际打印或保存字符串时,应将这些双反斜杠正确打印为单个反斜杠
例如,比较
print('\')
# SyntaxError: EOL while scanning string literal
到
在第一个字符串中,第二个引号由反斜杠转义。这说明了为什么通常不能在字符串中使用原始反斜杠。在第二个字符串中,第二个反斜杠由第一个字符串转义。这两个反斜杠被解释为一个反斜杠
print(repr('\\'))
# '\\'
但是第二个字符串的表示仍然显示两个反斜杠。此行为与其他特殊字符(如\n
)相同,在这些字符中更容易看到问题。正如\n
是表示换行的特殊字符一样,\
是表示单个反斜杠的特殊字符
print('hi\nmom')
# hi
# mom
print(repr('hi\nmom'))
# 'hi\nmom'
要真正回答你的问题,你的做法应该是正确的,但你可能不想这样做。这是因为使用“\$”
创建字符串并不能明确这个转义问题。它似乎是一个特殊字符\$
,就像\n
是一个特殊字符一样,但由于没有这样定义的字符,python解释器足够聪明,可以用双反斜杠替换单反斜杠。但你通常不想依赖这种行为
更好的方法是使用另一个反斜杠显式转义,或者使用一个不允许转义的反斜杠。所有这些都将给出相同的结果
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\$
您可以尝试re.sub。它将给出预期的结果
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)