此问题在此处已有答案:
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'
。
有没有人能帮我理解一下这微妙的差别?
我试着在网上搜索结果,但找不到任何具体的问题。
2条答案
按热度按时间t3irkdon1#
您的正则表达式模式是
word\(line break)
,即“word”后跟一个反斜杠,然后是一个换行符。反斜杠用于转义Meta字符或启动特殊序列。文字换行符不是元字符,序列 * 反斜杠+换行符 * 没有特殊意义,因此它前面的反斜杠没有意义。换句话说,您可以在任何您想要的字符之前放置反斜杠;如果字符不是Meta字符,并且反斜杠+字符的组合没有特殊意义,如\n
,则反斜杠只是表示没有任何意义,并被忽略。因此,正则表达式等价于
word(line break)
,它匹配字符串'word\n'
,因为它是“word”后跟一个换行符。slsn1g292#
\
对于Python解释器 * 和正则表达式解析器 * 有着特殊的意义。听起来你已经明白了:字符串
生成一个六个字符的字符串,其中最后两个字符是
\
和一个换行符。这个字符串反过来被解释为正则表达式。在正则表达式的上下文中,
\
可以用来引入一个特殊的字符类(例如\d
),但是如果它用在非字母数字字符之前,它就充当了转义符。由于换行符是非字母数字字符,\
+(linebreak)是匹配换行符的有效正则表达式。