我很新于正则表达式,尝试在Python中获取“\”字符。
通常我可以像这样转义“\”
print ("\\");
print ("i am \\nit");
输出
\
i am \nit
但是当我在正则表达式中使用相同的内容时,它并没有像我想象的那样起作用
print (re.findall(r'\\',"i am \\nit"));
并且把输出结果返回给我
['\\']
有人可以解释一下为什么吗?这与IT技术有关。
我很新于正则表达式,尝试在Python中获取“\”字符。
通常我可以像这样转义“\”
print ("\\");
print ("i am \\nit");
输出
\
i am \nit
但是当我在正则表达式中使用相同的内容时,它并没有像我想象的那样起作用
print (re.findall(r'\\',"i am \\nit"));
并且把输出结果返回给我
['\\']
编辑:问题实际上是关于print
如何处理列表和字符串的。它打印的是字符串的表示形式,而不是字符串本身。一个只包含反斜杠的字符串的表示形式是'\\'
。因此,findall
实际上可以正确地找到单个反斜杠,但print
没有按照您的期望打印它。请尝试:
>>> print(re.findall(r'\\',"i am \\nit")[0])
\
r
表示该字符串处于“原始”模式,即 \
不被视为特殊字符(与“正则表达式”无关)。r'\'
是不能使用的,因为您不能以反斜杠结尾文档中已经说明:
即使在原生字符串中,字符串引号也可以用反斜杠进行转义,但反斜杠仍将保留在字符串中;例如,r"\""是一个有效的字符串文字,由两个字符组成:反斜杠和双引号;r"\"不是有效的字符串字面量(即使是原始字符串,也不能以奇数个反斜杠结尾)。具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义后面的引号字符)。
但是你实际上可以使用非原始字符串来获取单个反斜杠:"\\"
。
re.compile("\\")
会产生错误 error: bogus escape (end of line)
。 - Limbo Pengre.compile("\\\\")
会生成一个可以匹配单个反斜杠的正则表达式。 - Tim Pietzckerre.findall
找到了一个匹配项,而匹配文本由反斜杠组成。它给你一个包含一个元素的列表,该元素是一个字符串,其中只有一个字符,即反斜杠。['\\']
,因为'\\'
是您编写“具有一个反斜杠的字符串”的方式 - 就像您在编写示例代码print "\\"
时所做的那样。"a string"
和原始字符串r"a raw string"
。 常规字符串字面值观察反斜杠转义,因此要实际将反斜杠放入字符串中,您需要对其进行转义。 原始字符串字面值像其他字符一样处理反斜杠,因此您在实际放入字符串中的字符方面更受限制(不能使用需要转义代码的特殊字符),但是如果您需要添加反斜杠以在字符串内具有意义而不仅仅是在创建字符串时,则更容易输入诸如正则表达式之类的内容,因为您不需要加倍反斜杠。在原始字符串中,除非反斜杠紧接着引号前面,否则不需要转义反斜杠。