首页 > 解决方案 > 无法使用正则表达式从 tycho.usno.navy.mil/timer.html 中提取时间

问题描述

我需要从提到的 URL 中提取美国海军天文台主时钟时间网页的 EDT、MDT 时间。我一直在尝试使用 re.findall 提取它,但我做不到。我正在使用以下正则表达式\d{2}\:\d{2}\:\d{2}\s(AM|PM)\s(MDT|PDT)。输出只有 PM 和 MDT 或 PDT。

标签: pythonregex

解决方案


首先,这是一个 HTML 页面,使用带有 HTML(或任何嵌套/分层数据)的正则表达式是一个坏主意。话虽如此,鉴于页面的相对简单性,我们可以让它在这种情况下滑动,但请记住,这不是推荐的做事方式。

您的问题是,如果您的模式包含捕获组,则re.findall()仅返回捕获的组((AM|PM)和)。(MDT|PDT)您可以将它们变成非捕获组以收集整个模式,即:

matches = re.findall(r"\d{2}:\d{2}:\d{2}\s(?:AM|PM)\s(?:MDT|PDT)", your_data)

或者,您也可以使用re.finditer()并提取匹配项:

matches = [x.group() for x in re.finditer(r"\d{2}:\d{2}:\d{2}\s(AM|PM)\s(MDT|PDT)", data)]

推荐阅读