You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动