正则表达式匹配月份名称日,年份

Siu*_*ami 2 python regex

试图从这个字符串中提取日期:

Publisher: Broadway Books; Anniversary, Reprint edition (October 8, 2002)
Run Code Online (Sandbox Code Playgroud)

我想得到这个: October 8, 2002

这是我正在使用的正则表达式.目标是使其适用于上述格式的任何日期.当我在https://regex101.com/上测试它但在我的代码中返回"无" 时,它可以工作.

pattern = re.compile("(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2},\s+\d{4}")
date = pattern.match(tag.get_text())
Run Code Online (Sandbox Code Playgroud)

iz_*_*iz_ 5

您正在使用re.match,它会查看文本是否与字符串开头的模式匹配.使用re.search替代,其寻找匹配的字符串中的任何位置.有关详细信息,请参见此处

码:

import re

text = "Publisher: Broadway Books; Anniversary, Reprint edition (October 8, 2002)"
pattern = re.compile(
    "(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|"
    "Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|"
    "Dec(ember)?)\s+\d{1,2},\s+\d{4}")

print(pattern.match(text))  # prints None
print(pattern.search(text))
print(pattern.search(text).group())
Run Code Online (Sandbox Code Playgroud)

结果:

None
<_sre.SRE_Match object; span=(57, 72), match='October 8, 2002'>
October 8, 2002
Run Code Online (Sandbox Code Playgroud)