如何用正则表达式在Pandas DataFrame中查找'\[a-z]'字符串?
解决DataFrame中查找字面
[a-z]字符串的问题 你的问题出在正则表达式的转义错误:你要匹配的是字面字符串[a-z],但原正则\[a-z]实际是匹配[后跟任意小写字母的模式,而非完整的[a-z];你尝试的r'\\[a-z]'则是匹配\+[+小写字母,同样不符合需求。
修正步骤:
正确编写正则表达式:要匹配字面的
[a-z],需要把[和]都转义(二者是正则元字符,用于定义字符集),使用原始字符串写法更简洁:p = re.compile(r'\[a-z\]')这个正则会精确匹配完整的
[a-z]字符串。修正后的完整代码:
import re import pandas as pd import numpy as np df = pd.read_excel(io = "mydata.xlsx", sheet_name = 'Sheet1', index_col = 0) # 筛选object类型列 header = df.select_dtypes(['object']).columns df_header = df[header] # 编译正确的正则,匹配字面[a-z] p = re.compile(r'\[a-z\]') # 检查每列是否包含目标模式 df_header_check = df_header.apply(lambda x: x.str.contains(p, na=False)) # 提取包含目标模式的行和列 result_df = df_header.loc[df_header_check.any(axis=1), df_header_check.any(axis=0)] print(result_df)
额外说明:
- 如果不想预编译正则,也可以直接在
str.contains中写正则表达式,效果一致:df_header_check = df_header.apply(lambda x: x.str.contains(r'\[a-z\]', na=False)) - 确认你的数据集中确实存在
[a-z]字符串,否则依然会返回空DataFrame(你提供的示例数据中未看到该模式,建议先检查样本数据)。
内容的提问来源于stack exchange,提问作者Joshua Chung
相关产品推荐
相关产品推荐

