regex 在正则表达式python中使用单个模式子函数替换字符串中的两个或多个字符

7lrncoxx  于 2022-12-14  发布在  Python
关注(0)|答案(1)|浏览(72)

使用单个正则表达式模式替换无效的电子邮件地址字符。将“At”、“at”替换为“@",并将“点”替换为“”。
编码:

import re

email = "abc at xyz.com, abc At xyz.com, abc (at) xyz [dot] com"
pa = re.compile(r'(\s+[\(\[]*\s*at*\s*[\)\]]*\s+)',flags=re.IGNORECASE)
em = pa.sub(r'@',email)
print(em)

输出量

abc@xyz.com, abc@xyz.com, abc@xyz [dot] com

预期产出

abc@xyz.com, abc@xyz.com, abc@xyz.com

如何用.“”替换“[点]”?

ghhkc1vu

ghhkc1vu1#

简单地说,re.sub的第二个参数可以是任意复杂度的函数,但要求该函数内联到一行似乎有点不诚实。
这里,我们创建一个re.sub,它使用一个简单的字典来决定用什么来替换匹配。

import re

email = "abc at xyz.com, abc At xyz.com, abc (at) xyz [dot] com"
pa = re.compile(r'\W*(at|dot)\W*', flags=re.IGNORECASE)
em = pa.sub(lambda m: {'dot': '.', 'at': '@'}[m.group(1).lower()], email)
print(em)

主要的技巧是只将字典键捕获到带括号的子表达式中,然后在.group(1)中可用。
演示:https://ideone.com/3Llu0i

相关问题