提问人:J. Yang 提问时间:11/6/2023 更新时间:11/6/2023 访问量:42
关于正则表达式中反斜杠的混淆 [重复]
Confusion about backslash in regular expression [duplicate]
问:
我试图理解正则表达式在以下情况下是如何解释的
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'
谁能帮我理解细微差别?
我尝试在线搜索结果,但找不到与此问题相关的任何内容。
答:
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'
评论