我理解为匹配文字反斜杠,必须在正则表达式中对其进行转义。使用原始字符串表示法,这意味着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
中的反斜杠实际上不是反斜杠吗?
感谢您的帮助!
答案 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.match
与re.search
的解释:What is the difference between Python's re.search and re.match?