python关于芬德尔()只给我一个结果

2024-09-30 12:23:27 发布

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

这是示例代码:

import re

source = """
BEGIN:VEVENT
DTSTART:20160404T113000Z
DTEND:20160404T141500Z
LOCATION:A3006
SUMMARY:[I-EM-3N:Energy Management Gr 3N] Basics of Mathematical Software
END:VEVENT

BEGIN:VEVENT
DTSTART:20160404T113000Z
DTEND:20160404T141500Z
LOCATION:A3007
SUMMARY:[I-EM-3N:Energy Management Gr 3N] Chemistry and Environment
END:VEVENT
"""

pattern = r'BEGIN.*?DTSTART:(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})\d{2}Z.*?DTEND:(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})\d{2}Z.*LOCATION:(.*?)\n.*?SUMMARY:\[(.*?):.*?\]\s(.*?)\s?\n.*?END:VEVENT'


s = re.findall(pattern, source, re.DOTALL)
print s

结果是[('2016'、'04'、'04'、'11'、'30'、'2016'、'04'、'04'、'14'、'15'、'A3007'、'I-EM-3N'、'Chemistry and Environment')],但另一个结果在哪里?你知道吗


Tags: resourcelocationsummarymanagementenergyendem
1条回答
网友
1楼 · 发布于 2024-09-30 12:23:27

你忘了做一个通配符匹配非贪婪(对我有用):

BEGIN.*?DTSTART:(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})\d{2}Z.*?DTEND:(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})\d{2}Z.*?LOCATION:(.*?)\n.*?SUMMARY:\[(.*?):.*?\]\s(.*?)\s?\n.*?END:VEVENT
                                                                                                           HERE^

而且,由于表达式很复杂且不太可读,请考虑使用"verbose" mode

pattern = r"""
BEGIN:VEVENT\n
DTSTART:(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})\d{2}Z\n
DTEND:(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})\d{2}Z\n
LOCATION:(.*?)\n
SUMMARY:\[(.*?):.*?\]\s(.*?)\s?\n
END:VEVENT
"""

s = re.findall(pattern, source, re.DOTALL | re.VERBOSE)
print(s)

相关问题 更多 >

    热门问题