问题描述
我的正则表达式表达式正在匹配其他意外组。我的目的是提取指定格式的日期(以字母表示的月份后跟年份,例如2009年3月),但是表达式匹配并捕获其他格式,例如2009年3月20日。输入如下。 / p>
df5 = pd.Series(["04/20/2009","04/20/09","4/20/09","4/3/09","Mar-20-2009","Mar 20,2009","march 20,"Mar. 20,"Mar 20 2009","20 Mar 2009","20 march 2009","20 Mar. 2009","20 march,"Mar 20th,"Mar 21st,"Mar 22nd,"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})')
的regex表达式,然后在regex101网站上重新检查了我的表达式并对其进行了更改。更改后的表达式如下
[^ ](?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z.,-]*\d{4}
但是更改后的表达式与数据框中的任何值都不匹配,而使用更改后的表达式,我可以在regex101网站上获取必要的[output]。我要去哪里错了?
解决方法
第一个看起来不错,您只需要以一个行首字符^
开头即可:
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
编辑:
您可能希望将该空间添加为必填项,因此请将其从方括号中删除:
df5.str.extractall(r'^(?P<date>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z.,\-]* \d{4})')