使用re.sub替换字符 - 保留一个字符

时间:2015-04-04 19:18:07

标签: python regex string

我试图修复表格中损坏的电子邮件记录。有电子邮件,例如:' 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

有人可以给我一些建议吗? (我想用逗号和空格分隔电子邮件)

2 个答案:

答案 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不会消耗任何字符串。它们只是断言。当您使用它们时,您不需要像上面的答案那样替换消耗的字符串。