Python3正则表达式与原始字符串疑问:代码匹配结果异常求解
为什么原始字符串d没匹配到正则模式
\\n? 别担心,这个问题其实是搞混了普通字符串的转义规则、原始字符串的特性和正则表达式的转义逻辑,我给你一步步拆解明白:
1. 先搞懂两个字符串的实际内容
普通字符串
c='qwerty\. i am hungry. \n z':
普通字符串里的转义符\会被Python解释器处理:\n会被转成实际的换行符(ASCII码为10的不可见字符),\.会被转成普通的.。所以c的真实内容是:qwerty. i am hungry. [换行] z原始字符串
d=r'qwerty\. i am hungry. \n z ':
原始字符串的前缀r是告诉Python:不要处理任何转义,里面的\就是一个普通的反斜杠字符。所以d的真实内容是:qwerty\. i am hungry. \n z(这里是\和n两个独立的可见字符,完全不是换行符)
2. 再看正则模式pattern='\\n'的实际含义
普通字符串里的\\会被Python转义成单个\,所以这个pattern传给正则引擎的实际内容是\n——而正则表达式里的\n,就是用来匹配实际的换行符的。
3. 匹配结果的原因就一目了然了
- 字符串c里有真实的换行符,所以
re.search(pattern, c)能匹配成功; - 字符串d里只有
\和n两个普通字符,没有换行符,自然匹配不到。
如果想让正则匹配d里的\n(也就是反斜杠加n的组合),你需要把pattern改成原始字符串,或者对反斜杠做双重转义:
# 方式1:用原始字符串定义正则模式 pattern = r'\\n' # 方式2:普通字符串里双重转义反斜杠 pattern = '\\\\n'
这样再去匹配d就能成功匹配到\n字符组合了。
内容的提问来源于stack exchange,提问作者Serhii Orlyk




