我正在尝试从网页的某个部分提取日期和事件编号。这是我正在尝试使用的正则表达式:Event \d+ begins (.+?) ((Sun|Mon|Tue|Wed|Thu|Fri|Sat).+?) PST|PDT
Event 4 begins for small business owners on Thursday, July 20, at 5:00 p.m. PDT in North America.
我想要的关键信息是正确事件的日期,在这种情况下是Thursday, July 20, at 5:00 p.m.
。
这个正则表达式导致它与这个日期不匹配怎么样?我已经多次这样做了,我没有看到它,需要第二双眼睛。
这是一个regex101示例:https://regex101.com/r/oJyLld/3/
答案 0 :(得分:2)
我在你的正则表达式中发现的唯一主要问题是在最后:
PST|PDT
您的模式实际上表示匹配以PST
结尾的感兴趣的行或隔离的字符串PDT
。如果您打算匹配PST
或PDT
,则应将替换括在括号中,就像使用日缩写一样。以下模式似乎有效:
Event \d+ begins (.+?) ((Sun|Mon|Tue|Wed|Thu|Fri|Sat).+?) (PST|PDT)
实际上我们可以进一步改进上述内容:
Event \d+ begins (.+?) (?:Sun|Mon|Tue|Wed|Thu|Fri|Sat).+? (?:PST|PDT)
你的正则表达式的第二个版本是一个改进,因为它不捕获交替(因为你显然不需要它们)。这意味着正则表达式引擎可能能够更快地匹配。我也试图取消你原来写的一些内容。