正则需求:将字符串中&替换为And,支持动态不区分大小写的例外规则
正则表达式替换问题解决方案
问题背景
给定例外列表和字符串列表,需完成带规则的&替换,具体要求如下:
- 将所有
&替换为' and ',但例外列表中的组合除外 - 例外列表支持动态输入
- 例外列表不区分大小写
- 例外组合中间有空格(如
r & b、r& b)时,仍需识别为对应例外 - 仅当例外组合被空格包围时才识别(如
sar&bd不视为例外)
输入示例
exception_lst = ['r&b', 'm&a'] str_lst = ['fe r&b fe', 'sar&bd', 'sd r &B b', 'as r& b ac', 'sdf O&B sd', 'df R&B sdc', 's r&p es', 'sf m & A df']
期望输出
str_lst = ['fe r&b fe', 'sar and bd', 'sd r&b b', 'as r&b ac', 'sdf O and B sd', 'df R&B sdc', 's r and p es', 'sf m&a df']
解决方案
分两步处理:先修复符合条件的例外组合格式,再替换非例外的&。
Python 实现代码
import re def process_strings(exception_lst, str_lst): exception_patterns = [] # 为每个例外项构建匹配规则 for exc in exception_lst: left, right = exc.split('&') # 匹配&前后可带任意空格、不区分大小写、且被单词边界包围的组合 pattern = re.compile( fr'\b({left.strip()})\s*&\s*({right.strip()})\b', re.IGNORECASE ) exception_patterns.append((pattern, exc)) processed_list = [] for s in str_lst: # 第一步:把例外组合统一为标准格式 for pattern, target in exception_patterns: s = pattern.sub(target, s) # 第二步:替换所有剩余的&为' and ' s = re.sub(r'&', ' and ', s) processed_list.append(s) return processed_list # 测试执行 exception_lst = ['r&b', 'm&a'] str_lst = [ 'fe r&b fe', 'sar&bd', 'sd r &B b', 'as r& b ac', 'sdf O&B sd', 'df R&B sdc', 's r&p es', 'sf m & A df' ] result = process_strings(exception_lst, str_lst) print("str_lst = [") for item in result: print(f" '{item}',") print("]")
代码说明
- 例外规则构建:拆分每个例外项的
&前后内容,用\s*匹配任意空格,\b确保组合被空格/单词边界包围,re.IGNORECASE实现大小写不敏感匹配 - 格式统一:先将字符串中符合例外规则的组合替换为标准形式(如
r & B转为r&b) - 剩余&替换:最后对未被标记为例外的
&执行替换操作
内容的提问来源于stack exchange,提问作者IrisEpode
相关产品推荐
相关产品推荐

