使用Google API从收件箱中获取电子邮件,每封电子邮件的正文都包含一个末尾的部分,就像电子邮件所回复的内容一样。这种模式可以无限重复,具体取决于电子邮件链的长度。
我试图从该字符串的开头得到相关的消息,然后才显示回复的信息。
示例模式是:
相关信息2019年4月25日星期四上午10:34一些名字<[email protected]>写道:引用信息2019年4月25日星期四上午10:33 <[email protected]>写道:上一页已引用信息
我想只提取相关信息
我尝试过这样的模式,但它会贪婪地将第一个引用的消息捕获到result.group(1)中
result = re.search('(.*) On (.*), (.*),(.*) at (.*)', m['snippet'])
让我知道:
result.group(1): RELEVANT MESSAGE On Thu, Apr 25, 2019 at 10:34 AM Some Name <[email protected]> wrote: QUOTED MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:33 AM <[email protected]> wrote: PREVIOUS QUOTED MESSAGE
我希望的是:
result.group(1): RELEVANT MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:34 AM Some Name <[email protected]> wrote: QUOTED MESSAGE On Thu, Apr 25, 2019 at 10:33 AM <[email protected]> wrote: PREVIOUS QUOTED MESSAGE
要么:
result.group(1): RELEVANT MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:34 AM Some Name <[email protected]> wrote: QUOTED MESSAGE
result.group(3): On Thu, Apr 25, 2019 at 10:33 AM <[email protected]> wrote: PREVIOUS QUOTED MESSAGE
这将只提取相关信息
test="RELEVANT MESSAGE On Thu, Apr 25, 2019 at 10:34 AM Some Name <[email protected]> wrote: \
QUOTED MESSAGE On Thu, Apr 25, 2019 at 10:33 AM <[email protected]> wrote: \
PREVIOUS QUOTED MESSAGE"
result = re.search('(.*?)(?=On[^,]+,[^,]+,[ 0-9]+at)', test)
result.group(0): 'RELEVANT MESSAGE '
我认为值得对正则表达式进行一点阐述(用非常通俗的术语):
(。*?):最后的?
意味着'非贪婪',否则它会尝试匹配尽可能多的字符(这就是你的正则表达式模式中主要发生的事情)。
(?= ...):意思是“匹配之前停留的......,但不是......
[^,] +:除,
(逗号)之外的所有字符,我们要在[^,]+,[^,]+,[ 0-9]+
中保存为分隔符