gpt4 book ai didi

python - 在 python 正则表达式中捕获重复的组

转载 作者:行者123 更新时间:2023-11-28 21:39:37 26 4
gpt4 key购买 nike

我有一个邮件日志文件,是这样的:

Aug 15 00:01:06 **** sm-mta*** to=<user1@gmail.com>,<user2@yahoo.com>,user3@aol.com, some_more_stuff
Aug 16 13:16:09 **** sendmail*** to=<user4@yahoo.com>, some_more_stuff
Aug 17 11:14:48 **** sm-mta*** to=<user5@gmail.com>,<user6@gmail.com>, some_more_stuff

我想要的是包含“sm-mta”的行中所有邮件主机的列表。在这种情况下,它将是:['gmail.com', 'yahoo.com', 'aol.com', 'gmail.com', gmail.com']

re.findall(r'sm-mta.*to=.+?@(.*?)[>, ]') 将只返回每个匹配行的第一个主机(['gmail.com','gmail.com'])

re.findall(r'.+?@(.*?)[>, ]') 将返回正确的列表,但我也需要过滤。有什么解决方法吗?

最佳答案

试试 regex 模块。

x="""Aug 15 00:01:06 **** sm-mta*** to=<user1@gmail.com>,<user2@yahoo.com>,user3@aol.com, some_more_stuff
Aug 16 13:16:09 **** sendmail*** to=<user4@yahoo.com>, some_more_stuff
Aug 17 11:14:48 **** sm-mta*** to=<user5@gmail.com>,<user6@gmail.com>, some_more_stuff"""
import regex
print regex.findall(r"sm-mta.*to=\K|\G(?!^).+?@(.*?)[>, ]", x, version=regex.V1)

输出:['', 'gmail.com', 'yahoo.com', 'aol.com', '', 'gmail.com', 'gmail.com']

忽略第一个空匹配。

https://regex101.com/r/7zPc6j/1

关于python - 在 python 正则表达式中捕获重复的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46603805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com