【问题标题】:re.sub() exception for email addresses - python电子邮件地址的 re.sub() 异常 - python
【发布时间】:2022-01-12 15:13:15
【问题描述】:

我有一个问题,通过以下 re.sub() 方法,我能够从 *.txt 文件中提取所有邮件地址。

emails = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", file)

现在,我想删除此 *.txt 中的所有标点符号,因为其中还有一些文本。

我删除了标点符号

output = re.sub(r'^\w\s', '', file)

但此功能还会从文本中的电子邮件地址中删除标点符号。我如何在这个 re.sub 中为邮件地址写一个例外?

谢谢。

【问题讨论】:

  • 一种可能的方法是 1. reg 用哈希字符串替换所有邮件(哈希应该避免标点符号,以及存储哈希和邮件的字典) 2. reg 替换标点符号 3. 字符串替换邮件。
  • 我想你想要re.sub(r"([a-z0-9.\-+_]+@[a-z0-9.\-+_]+\.[a-z]+)|[^\w\s]", r"\1", file)
  • Wiktor Stribiżew 谢谢!对,就是那样。但是这里的 r"\1" 是例外吗?或者这是如何工作的?

标签: python regex


【解决方案1】:

你可以使用

re.sub(r"([a-z0-9.\-+_]+@[a-z0-9.\-+_]+\.[a-z]+)|[^\w\s]", r"\1", file)

这里,电子邮件模式被捕获到第 2 组,替换模式中的 \1 反向引用恢复了结果字符串中的电子邮件文本。

注意[^\w\s] 匹配除单词和空白字符以外的任何字符,因此不匹配下划线。如果您也想删除下划线,请添加它作为替代:

re.sub(r"([a-z0-9.\-+_]+@[a-z0-9.\-+_]+\.[a-z]+)|[^\w\s]|_", r"\1", file)

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 1970-01-01
    • 2016-03-12
    • 2017-07-23
    • 2011-10-19
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多