为了账号安全,请及时绑定邮箱和手机立即绑定

仅删除前一封电子邮件的开头

仅删除前一封电子邮件的开头

慕后森 2022-01-05 19:49:52
我想知道如何删除电子邮件中以前消息的任何标题。有一个消息示例:Something above-----Message d'origine-----De : Myself <myself@himself.com>Envoyé : vendredi 8 mars 2019 14:30À : Someone <someone@himself.com>Cc : AnotherGuy <another@himself.com>Objet : My bad I forgot how to do itHi,blabla我需要之间删除一切-----Message d'origine-----与carriage return和empty new line之前"Hi,"。我试过以下正则表达式:-----Message d'origine-----[\s\S]*?[\r\n]但只-----Message d'origine-----匹配没有下面的其他行。但是,如果我改为使用"Hi,",它会匹配所有行:-----Message d'origine-----[\s\S]*?Hi有没有人可以帮助我问题出在哪里以及如何使用carriage return和empty new line?谢谢 :)
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

您需要匹配直到第一次出现换行符:

r"-----Message d'origine-----[\s\S]*?(?:\r?\n){2}"
                  ^^^^^^^^^^^^

请参阅正则表达式演示。该(?:\r?\n){2}模式匹配 CRLF 或 LF 行尾的两次重复。

示例 Python 代码:

import re
s = "YOUR STRING HERE"
s = re.sub(r"-----Message d'origine-----.*?(?:\r?\n){2}", '', s, flags=re.S)

请注意,当使用(=标志)时,[\s\S]它等于.在正则表达式中。re.Sre.DOTALL

如果您担心受非贪婪.*?模式影响的性能,请将其展开为

s = re.sub(r"-----Message d'origine-----.*(?:\r?\n(?!\r?\n).*)*\s*", "", s)

请参阅此正则表达式演示。不要在这种模式下使用re.Sre.DOTALL

现在[\s\S]*?(?:\r?\n){2}.*(?:\r?\n(?!\r?\n).*)*

  • .* - 该行的其余部分

  • (?:\r?\n(?!\r?\n).*)* - 0 次或多次重复

    • \r?\n(?!\r?\n) - 一个换行符后面没有另一个换行符

    • .* - 该行的其余部分


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号