猿问

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

我想知道如何删除电子邮件中以前消息的任何标题。有一个消息示例:


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 it


Hi,


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?


谢谢 :)


慕后森
浏览 159回答 1
1回答

holdtom

您需要匹配直到第一次出现双换行符:r"-----Message&nbsp;d'origine-----[\s\S]*?(?:\r?\n){2}" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^^^^^^^^^^^^请参阅正则表达式演示。该(?:\r?\n){2}模式匹配 CRLF 或 LF 行尾的两次重复。示例 Python 代码:import&nbsp;re s&nbsp;=&nbsp;"YOUR&nbsp;STRING&nbsp;HERE" s&nbsp;=&nbsp;re.sub(r"-----Message&nbsp;d'origine-----.*?(?:\r?\n){2}",&nbsp;'',&nbsp;s,&nbsp;flags=re.S)请注意,当使用(=标志)时,[\s\S]它等于.在正则表达式中。re.Sre.DOTALL如果您担心受非贪婪.*?模式影响的性能,请将其展开为s&nbsp;=&nbsp;re.sub(r"-----Message&nbsp;d'origine-----.*(?:\r?\n(?!\r?\n).*)*\s*",&nbsp;"",&nbsp;s)请参阅此正则表达式演示。不要在这种模式下使用re.S/&nbsp;re.DOTALL!现在[\s\S]*?(?:\r?\n){2}是.*(?:\r?\n(?!\r?\n).*)*:.*&nbsp;- 该行的其余部分(?:\r?\n(?!\r?\n).*)*&nbsp;- 0 次或多次重复\r?\n(?!\r?\n)&nbsp;- 一个换行符后面没有另一个换行符.*&nbsp;- 该行的其余部分
随时随地看视频慕课网APP

相关分类

Python
我要回答