关于正则表达式中反斜杠的混淆 [重复]

Confusion about backslash in regular expression [duplicate]

提问人:J. Yang 提问时间:11/6/2023 更新时间:11/6/2023 访问量:42

问:

我试图理解正则表达式在以下情况下是如何解释的

import re
pattern = 'word\\\n'
sentence = 'This is a word\n.'
match = re.search(pattern, sentence)
match.group()

它成功匹配 。'word\n'

根据我的理解,根据这篇文章,模式将首先解释为 ,然后在句子中搜索上面的模式。但是,在句子中不应与上述模式匹配,因为被解释为 .'word'+ backslash +'newline're.search'word\n''word\n''word'+'newline'

谁能帮我理解细微差别?

我尝试在线搜索结果,但找不到与此问题相关的任何内容。

Python 正则表达式 转义

评论


答:

0赞 Samwise 11/6/2023 #1

\对 Python 解释器正则表达式解析器具有特殊意义。听起来你已经明白了:

pattern = 'word\\\n'

生成一个六个字符的字符串,其中最后两个字符是和一个换行符。此字符串又被解释为正则表达式。\

在正则表达式的上下文中,可用于引入特殊字符类(例如 ),但如果在非字母数字字符之前使用,则用作转义符。由于换行符是非字母数字字符,因此 +(换行符)是与换行符匹配的有效正则表达式。\\d\

0赞 deceze 11/6/2023 #2

您的正则表达式模式是 ,即“word”后跟反斜杠,后跟换行符。反斜杠用于转义元字符或启动特殊序列。文字换行符不是元字符,序列反斜杠+换行没有特殊含义,因此之前的反斜杠没有意义。换句话说,您可以在任何您想要的字符之前放置一个反斜杠;如果该字符不是元字符,并且反斜杠 + 字符的组合没有特殊含义,例如 ,则反斜杠没有任何意义,将被忽略。word\(line break)\n

因此,您的正则表达式等价于 ,它与字符串 匹配,因为它是“word”,后跟换行符。word(line break)'word\n'