对python中的反斜杠感到困惑

时间:2017-07-24 19:18:01

标签: python backslash

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

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

然后我在Python中尝试一些例子。

string = re.sub(r"[^A-Za-z0-9(),!?'`]", " ", string)

结果与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.match中的反斜杠实际上不是反斜杠吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

查看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?