我想知道如何删除电子邮件中上一封邮件的任何标题。有一个消息示例:
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
吗?
谢谢:)
答案 0 :(得分:5)
您需要匹配直到第一次出现 double 换行符:
r"-----Message d'origine-----[\s\S]*?(?:\r?\n){2}"
^^^^^^^^^^^^
请参见regex demo。 (?:\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)
请参见this regex demo。请勿将re.S
/ re.DOTALL
与此模式配合使用!
[\s\S]*?(?:\r?\n){2}
现在为.*(?:\r?\n(?!\r?\n).*)*
:
.*
-该行的其余部分(?:\r?\n(?!\r?\n).*)*
-重复0次或更多次
\r?\n(?!\r?\n)
-一个换行符,之后没有另一个换行符.*
-该行的其余部分