我想知道如何删除电子邮件中以前消息的任何标题。有一个消息示例: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.S
re.DOTALL
如果您担心受非贪婪.*?
模式影响的性能,请将其展开为
s = re.sub(r"-----Message d'origine-----.*(?:\r?\n(?!\r?\n).*)*\s*", "", s)
请参阅此正则表达式演示。不要在这种模式下使用re.S
/ re.DOTALL
!
现在[\s\S]*?(?:\r?\n){2}
是.*(?:\r?\n(?!\r?\n).*)*
:
.*
- 该行的其余部分(?:\r?\n(?!\r?\n).*)*
- 0 次或多次重复\r?\n(?!\r?\n)
- 一个换行符后面没有另一个换行符.*
- 该行的其余部分
添加回答
举报
0/150
提交
取消