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

如何使用正则表达式查找DataFrame中特殊字符所在行号

问题说明

待处理的iris数据集中混入了?、@类特殊字符,需要定位特殊字符所在的具体行号,原有实现re.findall('?',str(data))无法得到正确结果。

原有代码问题
  • 正则语法错误:?是正则的元字符,代表匹配前序内容0次或1次,直接传入'?'作为正则规则属于语法错误,无法匹配字面意义的问号字符。
  • 匹配逻辑错误:直接将整个数据集对象转为字符串做全局匹配,即使正则规则正确,也只能得到匹配到的字符数量,无法关联到具体行号,且会把数据集对象的打印格式、索引标记等无关内容纳入匹配范围,结果不准。
正确实现方案

根据你读取数据集的方式选择对应代码即可:

基于pandas处理DataFrame格式数据集(最常用)

import pandas as pd
import re

# 替换为你的数据集实际路径
df = pd.read_csv("iris_with_special_chars.csv")
# 正则规则,匹配?或@,特殊元字符需要加\转义
match_pattern = re.compile(r'[?@]')
result_rows = []

for idx, row in df.iterrows():
    # 将当前行所有单元格内容拼接为字符串做匹配
    row_text = "".join(str(cell) for cell in row.values)
    if match_pattern.search(row_text):
        # 若需要0起始索引直接存idx,需要和日常表格对齐的1起始行号就存idx+1
        result_rows.append(idx + 1)

print("包含特殊字符的行号(1起始):", result_rows)

如果不想用正则,直接用字符串成员判断也可以,逻辑更直观:

import pandas as pd

df = pd.read_csv("iris_with_special_chars.csv")
special_chars = {"?", "@"}
result_rows = []

for idx, row in df.iterrows():
    row_text = "".join(str(cell) for cell in row.values)
    if any(char in row_text for char in special_chars):
        result_rows.append(idx + 1)

print("包含特殊字符的行号(1起始):", result_rows)

基于原生Python直接读取csv文件

import re

match_pattern = re.compile(r'[?@]')
result_rows = []

# 替换为你的数据集实际路径
with open("iris_with_special_chars.csv", "r", encoding="utf-8") as f:
    # 若不需要统计表头行,可以先执行next(f)再开始计数
    for line_num, line in enumerate(f, start=1):
        if match_pattern.search(line):
            result_rows.append(line_num)

print("包含特殊字符的行号:", result_rows)
补充说明
  • 正则中需要匹配?、*、+、.这类自带特殊含义的字符字面量时,要在字符前加\做转义,避免被解析为正则规则语法。
  • 如果需要查找更多特殊字符,直接在正则的字符集[]里追加,或者在special_chars集合里添加对应字符即可。

内容的提问来源于stack exchange,提问作者Suraj Janampally

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:09:17