Python中如何在正则匹配的特殊字符前添加转义符?
Python 给指定特殊字符添加转义符的简便实现
直接用Python的re模块就能搞定,核心是用re.sub()做正则替换,配合lambda表达式给每个匹配到的特殊字符加转义符。
核心代码示例
如果你要给每个单独的特殊字符都加转义(比如**会变成\*\*),可以这么写:
import re original_str = "My name is * and he is *" # 去掉原正则里的+,匹配单个特殊字符 special_chars_pattern = r'[-._!"`\'#%&,:;<>=@{}~$\()*+\/\\?\[\]^|]' # 对每个匹配到的字符前加反斜杠 escaped_str = re.sub(special_chars_pattern, lambda match: f'\\{match.group()}', original_str) print(escaped_str) # 输出:My name is \* and he is \*
关于正则里的+
你原正则里用了+,它会把连续的特殊字符当成一个整体处理。比如如果原字符串是"My name is ** and he is *",用带+的正则:
special_chars_pattern = r'[-._!"`\'#%&,:;<>=@{}~$\()*+\/\\?\[\]^|]+' escaped_str = re.sub(special_chars_pattern, lambda match: f'\\{match.group()}', original_str) # 输出:My name is \** and he is \*
如果需要给每个连续的特殊字符单独加转义,就去掉+即可,根据你的实际需求调整。
为什么不用re.escape()?
re.escape()会自动转义所有正则元字符,但它的转义范围比你指定的要广(比如会转义所有正则里有特殊意义的字符,而非你自定义的列表),所以不适合你的场景,还是用自定义正则+re.sub()更精准。
内容的提问来源于stack exchange,提问作者SingSing Hải
相关产品推荐
相关产品推荐

