正则表达式:无法在另一个站点完成的 jupyter notebook 中复制预期输出

Regex: Can't replicate the expected output in jupyter notebook which is done in another site

我的正则表达式正在匹配其他意外组。我的目标是提取指定格式的日期(字母中的月份后跟年份,例如 2009 年 3 月),但 表达式匹配并捕获 其他格式,如 2009 年 3 月 20 日。输入如下如下。

df5 = pd.Series(["04/20/2009", "04/20/09", "4/20/09", "4/3/09", "Mar-20-2009", "Mar 20, 2009", "March 20, 2009", "Mar. 20, 2009", "Mar 20 2009", "20 Mar 2009","20 March 2009", "20 Mar. 2009", "20 March, 2009", "Mar 20th, 2009", "Mar 21st, 2009", "Mar 22nd, 2009", "Feb 2009", "Sep 2009", "Oct 2010", "6/2008","12/2009", "2009", "2010"])

我使用的正则表达式 df5.str.extractall(r'(?P<date>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z., -]*\d{4})') 然后我在 regex101 网站上重新检查了我的表达式并对其进行了更改。修改后的表达式如下

[^ ](?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z., -]*\d{4}

但是更改后的表达式与数据框中的任何值都不匹配,而使用更改后的表达式我可以在 regex101 网站上获得我需要的 [output]。我哪里错了?

第一个看起来不错,你只需要以 line-start 个字符开头 ^:

df5.str.extractall(r'^(?P<date>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z., \-]*\d{4})')

16 0      Feb 2009
17 0      Sep 2009
18 0      Oct 2010

编辑:

您可能希望将 space 添加为必填项,因此将其从方括号中删除:

df5.str.extractall(r'^(?P<date>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z.,\-]* \d{4})')