如何在python中转义“\”字符

2024-06-13 21:41:04 发布

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

我对正则表达式很陌生,并尝试使用python获取“\”字符

通常我可以像这样逃走

print ("\\");
print ("i am \\nit");

输出

\
i am \nit

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

print (re.findall(r'\\',"i am \\nit"));

并返回我的输出

['\\']

有人能解释一下为什么吗


Tags: 代码ream字符print想象regxfindall
3条回答

注意,这里使用的是两种不同的字符串文本——有常规字符串"a string"和原始字符串r"a raw string"。常规的字符串文字会观察反斜杠转义,因此要在字符串中实际放置反斜杠,还需要对其进行转义。原始字符串文本将反斜杠视为任何其他字符,因此您可以实际将哪些字符放入字符串(不需要转义代码的特殊字符)会受到更大的限制,但输入正则表达式之类的内容会更容易,因为如果需要添加反斜杠以使字符串内部具有含义,而不仅仅是在创建字符串时,则不需要将反斜杠加倍。

can someone please explain why

因为re.findall找到一个匹配项,而匹配文本由反斜杠组成。它为您提供了一个包含一个元素的列表,该元素是一个字符串,包含一个字符,即反斜杠。

这是写['\\']的,因为'\\'是写“带一个反斜杠的字符串”的方式,就像写示例代码print "\\"时必须做的那样。

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

>>> print(re.findall(r'\\',"i am \\nit")[0])
\

(以下是我最初的答案,可以忽略(完全不相关),我最初误解了这个问题。但它似乎有点被高估了,所以我就把它留在这里。)

字符串的前缀r表示字符串处于“原始”模式,即\不被视为特殊字符(它与“regex”无关)。

但是,r'\'不起作用,因为不能用反斜杠结束原始字符串,it's stated in the docs

Even in a raw string, string quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character).

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

相关问题 更多 >