正则表达式过滤列表项求助:大小写不敏感处理及代码精简
搞定大小写不敏感的Iteration匹配 + 精简代码方案
嘿,我懂你现在的痛点——之前要写一堆分支处理不同大小写的Iteration,代码又长又难维护,还怕未来出现iTERaTion这种奇奇怪怪的大小写组合对吧?其实用正则的大小写不敏感模式就能一次性解决所有问题,还能顺便完成数字提取和日期转换,代码会清爽很多!
核心技巧:正则的不敏感匹配模式
不用再分别写匹配Iteration、iteration的逻辑,直接给正则加上大小写不敏感修饰符,就能覆盖所有大小写变体,不管是全大写、全小写还是混合大小写都能命中。
具体代码实现(以Python为例)
假设你的JSON里有个列表,项的格式比如是"Iteration 2024"、"iTERaTion 35"这类,看下面的精简写法:
1. 读取JSON并提取数字转日期
import re import json from datetime import datetime # 读取你的JSON文件 with open("your_data.json", "r") as f: raw_data = json.load(f) # 定义正则:匹配任意大小写的Iteration,捕获后面的数字 # re.IGNORECASE 就是关键的不敏感开关 iteration_pattern = re.compile(r"iteration\s*(\d+)", re.IGNORECASE) processed_dates = [] for item in raw_data["target_list"]: # 替换成你JSON里的列表键名 match_result = iteration_pattern.search(item) if match_result: # 提取数字,转成你需要的日期格式(这里假设数字是年份,可按需调整) target_num = int(match_result.group(1)) formatted_date = datetime(year=target_num, month=1, day=1).strftime("%Y-%m-%d") processed_dates.append(formatted_date)
2. 直接替换原列表项(如果需要更新内容)
要是你想把原列表里的Iteration XXX直接替换成日期,用列表推导式+正则替换更简洁:
updated_list = [ iteration_pattern.sub( lambda m: datetime(year=int(m.group(1)), month=1, day=1).strftime("%Y-%m-%d"), item ) for item in raw_data["target_list"] if iteration_pattern.search(item) ]
为什么这方法好用?
- 全覆盖:不管
Iteration怎么变大小写,都能精准匹配,再也不用新增分支 - 代码精简:去掉了冗余的拼接和多正则逻辑,维护起来省心太多
- 扩展性强:后续要调整日期格式或者匹配规则,改正则和日期转换部分就行
内容的提问来源于stack exchange,提问作者suraj das




