为什么look ahead会返回匹配的时间戳

2024-07-04 07:43:50 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试用python编写一个脚本进行后期处理。我有一个包含带有时间戳的消息的文件。我想将所有邮件提取到一个列表中。
Regex-从消息开始直到下一个时间戳

findallItems = re.findall(r'(?s)((?<=message).*?(?=((\d{4})\-((0[1-9])|(1[0-2]))\-((0[1-9])|(1[0-2]))|\Z)))', fileread)

这工作得很好,但它也返回匹配的时间戳。我怎么能只回邮件而不加时间戳呢

如果我使用先行位置作为文本,那么它工作得很好。例如

findallItems = re.findall(r'(?s)((?<=message).*?(?=message|\Z))',fileread)

Tags: 文件文本re脚本消息message列表时间
1条回答
网友
1楼 · 发布于 2024-07-04 07:43:50

您需要删除不必要的捕获括号,并将其他括号转换为非捕获括号:

findallItems = re.findall(r'(?s)(?<=message).*?(?=(?:\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-2])|\Z))', fileread)

this regex demo

但是,您可以只在必要的模式上保留一个捕获组,re.findall将只返回此组值:

(?s)message(.*?)(?:\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-2])|\Z)
           ^   ^

another regex demo

相关问题 更多 >

    热门问题