Python实现正则输入与Excel比对并高亮差异的方法咨询
简单实现方案(无复杂依赖,新手能直接跑)
首先修正你现有代码的几个小问题,再补完比对逻辑,全程没有复杂写法:
- 不要用
str当变量名,这是Python内置的字符串类型,用了容易出莫名其妙的bug - 你原来写的正则替换规则不对,会误删其他字符,直接把要删的
^、.、|、,四个字符放到正则字符集里就行 - 替换完分隔符之后,你之前注释掉的
split()要打开,把长字符串拆成单个待比对的字符串列表,不然没法逐个匹配 - 读Excel之后不用拿着整个表格比对,把你要比对的那一列内容提出来存成集合就行,查差异速度快,代码也好写
完整可运行代码
把代码里的列名换成你自己Excel里存基准内容的实际列名就能用:
import re import pandas as pd # 接收用户输入 raw_input = input("Enter Regex : ") # 移除指定分隔符,正则里只需要给有特殊含义的.加转义就行 cleaned_content = re.sub(r"[\^.|,]", " ", raw_input) # 拆分出纯字母数字的条目,自动过滤多余空格 target_list = [item for item in cleaned_content.split() if item] # 打印处理后的结果 print("处理后待比对内容:", target_list, "\n") # 加载Excel,⚠️ 把下面的列名换成你自己表格里存比对基准的列名 compare_column = "替换成你的Excel列名" df = pd.read_excel(r"C:\Users\...\...\...\Spreadsheet_Comparison.xlsx") # 提取基准值:去空值、全部转字符串避免类型不匹配、转集合去重提速 benchmark_values = set(df[compare_column].dropna().astype(str).tolist()) # 比对输出差异 print("=== 存在差异的内容(输入内容不在Excel基准库中) ===") for single_item in target_list: if single_item not in benchmark_values: # 终端黄色高亮,不支持高亮的终端直接删掉前后的\033开头的转义码就行 print(f"\033[93m>>> 差异项:{single_item}\033[0m") # 可选:如果需要找Excel里有、输入里没提到的差异,打开下面这段 # print("\n=== 存在差异的内容(Excel有但输入未包含) ===") # input_values = set(target_list) # for bench_item in benchmark_values: # if bench_item not in input_values: # print(f"\033[91m>>> Excel独有项:{bench_item}\033[0m")
几个注意点
- 要是不知道自己Excel里的列名叫啥,在读到df之后加一行
print(df.columns)跑一次,就能看到所有列名,复制过来替换就行 - 所有比对内容都统一转成了字符串,不会出现Excel里存数字123、输入是字符串"123"就判定为不匹配的问题
- 如果不需要高亮,直接把打印语句里的
\033[93m和\033[0m删掉,正常打印内容就行 - 现在的替换规则只会删你要求移除的四个分隔符,不会误删字母数字
内容的提问来源于stack exchange,提问作者Suleman
相关产品推荐
相关产品推荐

