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

juud5qan  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(118)

此问题在此处已有答案

Confused about the backslash in Python(2个答案)
14天前关门了。
我试图理解在下面的情况下正则表达式是如何解释的

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

字符串
它成功匹配'word\n'
根据我的理解,根据这个post,模式将首先被解释为'word'+ backslash +'newline',然后re.search将在句子中搜索上面的模式。但是,句子中的'word\n'不应该匹配上面的模式,因为'word\n'被解释为'word'+'newline'
有没有人能帮我理解一下这微妙的差别?
我试着在网上搜索结果,但找不到任何具体的问题。

t3irkdon

t3irkdon1#

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

slsn1g29

slsn1g292#

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

pattern = 'word\\\n'

字符串
生成一个六个字符的字符串,其中最后两个字符是\和一个换行符。这个字符串反过来被解释为正则表达式。
在正则表达式的上下文中,\可以用来引入一个特殊的字符类(例如\d),但是如果它用在非字母数字字符之前,它就充当了转义符。由于换行符是非字母数字字符,\ +(linebreak)是匹配换行符的有效正则表达式。

相关问题