如何使用正则表达式从字符串末尾删除可能重复的模式?

问题描述 投票:0回答:1

使用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 &lt;[email protected]&gt; wrote: QUOTED MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:33 AM &lt;[email protected]&gt; wrote: PREVIOUS QUOTED MESSAGE

我希望的是:

result.group(1): RELEVANT MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:34 AM Some Name &lt;[email protected]&gt; wrote: QUOTED MESSAGE On Thu, Apr 25, 2019 at 10:33 AM &lt;[email protected]&gt; wrote: PREVIOUS QUOTED MESSAGE

要么:

result.group(1): RELEVANT MESSAGE
result.group(2): On Thu, Apr 25, 2019 at 10:34 AM Some Name &lt;[email protected]&gt; wrote: QUOTED MESSAGE
result.group(3): On Thu, Apr 25, 2019 at 10:33 AM &lt;[email protected]&gt; wrote: PREVIOUS QUOTED MESSAGE
python regex google-api
1个回答
1
投票

这将只提取相关信息

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]+中保存为分隔符

© www.soinside.com 2019 - 2024. All rights reserved.