如何用正则表达式精准匹配SQL/Python文件中待删除列名?
用正则实现SQL/Python文件中列名的精确匹配
以下是修改后的完整代码,替换原in语句为正则匹配,实现列名的精确查找:
import glob import re # 新增导入正则模块 # 读取待删除列名列表 columns_to_delete_file = 'column_fields_to_delete.txt' with open(columns_to_delete_file) as f: delete_columns_list = [line.strip() for line in f if line.strip()] # 过滤空行 # 指定要扫描的文件路径 directories = [ '/users/xx/sql/**/*.sql', '/users/xx/Python/**/*.py' ] for directory in directories: for file in glob.glob(directory, recursive=True): try: with open(file, 'r', encoding='utf-8') as f: contents = f.read() upper_contents = contents.upper() # 统一转大写,避免大小写不匹配 exception_columns = [] for column_name in delete_columns_list: # 构建正则模式:使用单词边界确保精确匹配,转义列名中的特殊字符 column_upper = column_name.upper() pattern = rf'\b{re.escape(column_upper)}\b' # 检查是否存在匹配 if re.search(pattern, upper_contents): exception_columns.append(column_name) if exception_columns: print(f"{file} 文件包含待删除列:{exception_columns}\n") except Exception as e: # 可选:取消注释打印错误信息,方便排查问题 # print(f"处理文件 {file} 时出错:{str(e)}") pass
关键修改说明:
- 导入正则模块:新增
import re,用于正则匹配操作。 - 过滤空行:读取列名列表时过滤空行,避免无效匹配。
- 正则模式构建:
- 使用
re.escape()转义列名中的特殊字符(如减号、点号等),防止被正则解析为语法符号。 \b是单词边界,确保匹配的是完整列名,不会匹配类似user_id_abc或abc_user_id的子串。- 统一转大写处理,避免因大小写差异导致的漏匹配(比如SQL中列名可能写为
User_ID)。
- 使用
- 匹配逻辑:用
re.search()替代原in语句,只要找到一次匹配就判定该文件包含目标列,效率更高。
适配场景说明
这个正则模式可以覆盖以下常见的列名出现场景:
- SQL语句中:
SELECT id, user_id FROM table、WHERE user_id = 1、UPDATE table SET user_id = 'test' - Python代码中:
df['user_id']、df.user_id、columns = ['id', 'user_id']
内容的提问来源于stack exchange,提问作者punsoca
相关产品推荐
相关产品推荐

