注意,这里使用的是两种不同的字符串文本——有常规字符串"a string"和原始字符串r"a raw string"。常规的字符串文字会观察反斜杠转义,因此要在字符串中实际放置反斜杠,还需要对其进行转义。原始字符串文本将反斜杠视为任何其他字符,因此您可以实际将哪些字符放入字符串(不需要转义代码的特殊字符)会受到更大的限制,但输入正则表达式之类的内容会更容易,因为如果需要添加反斜杠以使字符串内部具有含义,而不仅仅是在创建字符串时,则不需要将反斜杠加倍。
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).
注意,这里使用的是两种不同的字符串文本——有常规字符串
"a string"
和原始字符串r"a raw string"
。常规的字符串文字会观察反斜杠转义,因此要在字符串中实际放置反斜杠,还需要对其进行转义。原始字符串文本将反斜杠视为任何其他字符,因此您可以实际将哪些字符放入字符串(不需要转义代码的特殊字符)会受到更大的限制,但输入正则表达式之类的内容会更容易,因为如果需要添加反斜杠以使字符串内部具有含义,而不仅仅是在创建字符串时,则不需要将反斜杠加倍。因为
re.findall
找到一个匹配项,而匹配文本由反斜杠组成。它为您提供了一个包含一个元素的列表,该元素是一个字符串,包含一个字符,即反斜杠。这是写
['\\']
的,因为'\\'
是写“带一个反斜杠的字符串”的方式,就像写示例代码print "\\"
时必须做的那样。编辑:问题是实际上如何使用列表和字符串。它打印字符串的表示,而不是字符串本身,只包含反斜杠的字符串的表示是
'\\'
。所以findall
实际上正确地找到了单个反斜杠,但是print
并没有像您预期的那样打印它。尝试:(以下是我最初的答案,可以忽略(完全不相关),我最初误解了这个问题。但它似乎有点被高估了,所以我就把它留在这里。)
字符串的前缀
r
表示字符串处于“原始”模式,即\
不被视为特殊字符(它与“regex”无关)。但是,
r'\'
不起作用,因为不能用反斜杠结束原始字符串,it's stated in the docs:但实际上,您可以使用非原始字符串来获取一个反斜杠:
"\\"
。相关问题 更多 >
编程相关推荐