如何定位字符串最后一个@,实现邮箱旧域名精准替换?
邮箱旧域名替换功能修改方案
问题分析
原代码使用email.index("@")定位第一个@符号,会截断第一个@之后、最后一个@之前的所有@符号,无法满足保留所有前置@的需求。
修改思路
使用rsplit('@', 1)从邮箱字符串右侧仅分割一次,将字符串拆分为两部分:
- 第一部分:包含所有前置@符号在内的内容(比如
demo@@@@@) - 第二部分:最后一个@之后的域名(比如
drungston.com)
随后判断第二部分是否等于指定旧域名,若是则替换为新域名;同时提前处理新旧域名相同的场景,直接返回原邮箱避免无效操作。
修改后的代码
def replace_email(email, old_domain, new_domain): # 新旧域名相同直接返回原邮箱 if old_domain == new_domain: return email # 从右侧分割一次@,拆分前置内容和域名 if '@' in email: prefix, domain = email.rsplit('@', 1) if domain == old_domain: return f"{prefix}@{new_domain}" return email # 测试用例 print(replace_email('demo@@@@@drungston.com','drungston.com','google.com')) # 输出: demo@@@@@google.com print(replace_email('test@@@yahoo.com','yahoo.com','yahoo.com')) # 输出: test@@@yahoo.com
代码说明
rsplit('@', 1):确保只拆分最后一个@符号,完整保留前面所有的@和内容- 提前判断新旧域名是否相同,减少不必要的字符串操作
- 先检查邮箱是否包含@符号,避免拆分时抛出异常
内容的提问来源于stack exchange,提问作者Anil Yadav
相关产品推荐
相关产品推荐

