You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何re.search('|')匹配DataFrame元素时结果不符合预期?

问题分析:正则匹配意外输出所有First列元素的原因

问题重现

代码

import pandas as pd
import numpy as np
import re

df_test = pd.DataFrame(np.array([['a|b', 'b', 'c|r'], [ 'e', 'f', 'g']]), columns=['First', 'Second', 'Third'])

for elem in df_test.get('First'):
    x = bool(re.search('|', elem))
    if x == True:
        print(elem)

实际输出

a|b
e

预期输出

a|b

问题原因

你使用的正则表达式'|'是正则中的特殊元字符,代表“逻辑或”。单独写'|'等价于匹配''|''——也就是匹配空字符串,而任何非空字符串中都存在空字符串(比如字符串开头、结尾或字符间隙),所以re.search('|', elem)对所有非空元素都会返回匹配结果,转成布尔值后为True,导致'e'也被打印。

修正方案

有两种简洁的解决方式:

  • 转义正则特殊字符:将|转义为普通字符,使用原始字符串r'\|'或者双反斜杠'\\|',这样只会匹配实际存在的|符号:
for elem in df_test.get('First'):
    x = bool(re.search(r'\|', elem))
    if x:
        print(elem)
  • 直接用字符串包含判断:如果只是检查字符串中是否存在|,用Python原生的in操作符更高效,无需正则:
for elem in df_test.get('First'):
    if '|' in elem:
        print(elem)

内容的提问来源于stack exchange,提问作者Mikhail Rotar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:54:53