如何在python中转义"\"字符

nit*_*rma 4 python regex

我是正则表达式的新手,并尝试使用python获取"\"字符

通常我可以像这样逃避"\"

print ("\\");
print ("i am \\nit");
Run Code Online (Sandbox Code Playgroud)

产量

\
i am \nit
Run Code Online (Sandbox Code Playgroud)

但是当我在regX中使用相同的东西时,它并没有像我想的那样工作

print (re.findall(r'\\',"i am \\nit"));
Run Code Online (Sandbox Code Playgroud)

并返回我的输出

['\\']
Run Code Online (Sandbox Code Playgroud)

请有人请解释原因

huo*_*uon 14

编辑:问题实际上是如何print使用列表和字符串.它打印字符串的表示形式,而不是字符串本身,只包含反斜杠的字符串的表示形式'\\'.所以findall实际上是正确地找到了单个反斜杠,但是print没有像你期望的那样打印它.尝试:

>>> print(re.findall(r'\\',"i am \\nit")[0])
\
Run Code Online (Sandbox Code Playgroud)

(以下是我的原始答案,它可以被忽略(它完全无关紧要),我最初误解了这个问题.但它似乎有点被推翻了,所以我会把它放在这里.)

r字符串上的前缀表示字符串处于"原始"模式,即\不被视为特殊字符(它与"正则表达式"没有任何关系).

但是,r'\'不起作用,因为你不能用反斜杠结束原始字符串,它在文档中说明:

即使在原始字符串中,字符串引号也可以使用反斜杠进行转义,但反斜杠仍保留在字符串中; 例如,r"\""是一个有效的字符串文字,由两个字符组成:反斜杠和双引号; r"\"不是有效的字符串文字(即使原始字符串也不能以奇数个反斜杠结尾).具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义以下引号字符).

但实际上你可以使用非原始字符串来获得一个反斜杠:"\\".