对 python 中的反斜杠感到困惑

Confused about the backslash in python

我知道要匹配文字反斜杠,必须在正则表达式中对其进行转义。使用原始字符串表示法,这意味着 r"\"。没有原始字符串表示法,必须使用 "\\".

当我看到代码 string = re.sub(r"[^A-Za-z0-9(),!?\'\`]", " ", string) 时,我想知道 \'\` 中反斜杠的含义,因为它也适用于 '`,喜欢 string = re.sub(r"[^A-Za-z0-9(),!?'`]", " ", string)。是否需要添加反斜杠?

然后我尝试 Python 中的一些示例。

1) str1 = "\'s"
   print(str1)
   str2 = "'s"
   print(str2)

结果与's相同。我认为这可能是为什么在以前的代码中,他们在 string = re.sub(r"[^A-Za-z0-9(),!?\'\`]", " ", string) 中使用 \'\` 的原因。我想知道 "\'s""'s" 之间有什么区别吗?

2) string = 'adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .'
   re.match(r"\", string)

re.matchreturns什么都没有,说明字符串中没有反斜杠。但是,我确实在其中看到了反斜杠。 \'中的反斜杠实际上不是反斜杠吗?

感谢您的帮助!

在 python 中,这些是转义字符,因为它们在代码中除了显示在屏幕上之外还有其他含义(例如,一个字符串可以通过将其包装在一个单独的引用)。您可以看到所有 python 字符串文字 here,但在该字符串中找不到反斜杠的原因是它们被视为转义单引号。虽然不是必需的,但它仍然是有效的语法,因为有时需要它

查看 https://docs.python.org/2.0/ref/strings.html 以获得更好的解释。

第二个示例的问题在于 string 不是原始字符串,因此 \' 被解释为 '。如果将其更改为:

>>> not_raw = 'adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .'
>>> res1 = re.search(r'\',not_raw)
>>> type(res1)
<type 'NoneType'>
>>> raw = r'adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .'
>>> res2 = re.search(r'\',raw)
>>> type(res2)
<type '_sre.SRE_Match'>

关于 re.matchre.search 的解释:What is the difference between Python's re.search and re.match?