Python正则:用单个模式替换邮箱无效字符(at/dot)
用Python正则一次性替换邮箱无效字符
问题分析
你需要一次性完成两类替换:
- 将
At/at(含圆括号/方括号包裹的情况)替换为@ - 将
dot(含方括号包裹的情况)替换为.
之前的代码仅覆盖了at相关匹配,缺少dot的处理分支,导致[dot]未被替换。
解决方案
通过正则分支匹配所有目标模式,结合替换函数实现精准替换:
import re # 定义替换映射 replace_map = { 'at': '@', 'dot': '.' } def replace_handler(match): # 去除匹配内容的括号/方括号,转小写后匹配映射表 clean_content = match.group().strip('[]()').lower() return replace_map.get(clean_content, match.group()) # 测试输入字符串 test_input = "abc[At]xyz.com, abc(at)xyz.com, abcxyz [dot] com" # 正则模式:匹配三类目标内容 pattern = r'\[(at|dot)\]|\((at)\)|(at|dot)' # 执行替换,忽略大小写 final_result = re.sub(pattern, replace_handler, test_input, flags=re.IGNORECASE) print(final_result) # 输出:abc@xyz.com, abc@xyz.com, abc@xyz.com
代码说明
- 正则模式拆解:
\[(at|dot)\]:匹配方括号包裹的at/dot(如[At]、[dot])\((at)\):匹配圆括号包裹的at(如(at)、(At))(at|dot):匹配裸写的at/dot(如at、Dot)
- 忽略大小写:通过
flags=re.IGNORECASE统一匹配At/AT/dot/Dot等变体 - 替换逻辑:先去除匹配内容的括号/方括号,转小写后从映射表中取出对应符号,确保替换精准
内容的提问来源于stack exchange,提问作者Rifat Jamil
相关产品推荐
相关产品推荐

