使用re模块批量替换多模式(含括号且不区分大小写)问题排查
解决带特殊正则字符的多模式大小写敏感替换问题
你的问题核心在于:当替换模式包含括号这类正则元字符时,re.sub会将它们当作正则语法解析(比如括号用于分组),而非匹配文本中的普通括号字符,导致无法正确匹配目标内容。
修复方案
使用re.escape()函数对每个替换模式进行转义,它会自动将所有正则特殊字符(如()[]{}*.+?^$\\|-)转换为普通字符,确保模式能精准匹配文本里的原始内容。
修改后的代码
import re def replace_multiple_patterns(input_string: str, replace_pattern: list, replace_with: str, ignore_case: bool = True) -> str: for rp in replace_pattern: # 转义正则特殊字符,确保匹配原始文本 escaped_pattern = re.escape(rp) input_string = re.sub(escaped_pattern, replace_with, input_string, flags=re.IGNORECASE if ignore_case else 0) return input_string
测试验证
运行你的测试案例:
# 测试案例1 replace_patterns = [" test", "my"] input_string = "My sample Test string" print(replace_multiple_patterns(input_string, replace_patterns, "")) # 输出: sample string # 测试案例2 replace_patterns = [" (test)", "my"] input_string = "My sample (Test) string" print(replace_multiple_patterns(input_string, replace_patterns, "")) # 输出: sample string
两个案例均能得到你期望的结果。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

