我试图修复表格中损坏的电子邮件记录。有电子邮件,例如:' google @ google.comyahoo @ yahoo.com'但是可以有一封电子邮件,例如&go ;@google.com'。在我看来,使用re.sub。的最佳方法是正确的。但是有一点问题。如果有记录:
email = 'google@google.comyahoo@yahoo.com'
我不能简单地替换(' .com'。#,'),因为它会影响' .com'子。所以我想使用re.sub('.com\w', '.com, \w',email)
替换那些' .com'子串,不在记录的末尾。问题是我想在那里保留一个\ w值。
print re.sub('.com\w', '.com, \w',email)
>>> google@google.com, \wahoo@yahoo.com
而不是
>>> google@google.com, yahoo@yahoo.com
有人可以给我一些建议吗? (我想用逗号和空格分隔电子邮件)
答案 0 :(得分:3)
使用捕获组并反向引用替换呼叫中的组:
>>> import re
>>> email = 'google@google.comyahoo@yahoo.com'
>>> re.sub(r'\.com(\w)', '.com, \\1', email)
'google@google.com, yahoo@yahoo.com'
Backreferences回想一下capturing group匹配的内容。反向引用被指定为反斜杠(\
);然后是一个数字,表示要召回的群组号。
答案 1 :(得分:1)
x="google@google.comyahoo@yahoo.com"
print re.sub(r"(?<=\.com)(?=\w)",", ",x)
输出:google@google.com, yahoo@yahoo.com
使用lookarounds
。请参阅演示。
https://regex101.com/r/sJ9gM7/48
Lookarounds不会消耗任何字符串。它们只是断言。当您使用它们时,您不需要像上面的答案那样替换消耗的字符串。