首页 > 解决方案 > 正则表达式:提取日期的表达式不适用于 Series 对象引发错误

问题描述

我正在尝试从文本数据中提取日期。当我在 regex101 网站上签入时,该表达式有效并且工作正常。但是当应用于数据时,它会引发错误“ ValueError:模式不包含捕获组”。我的示例文本是作为熊猫系列对象输入的 ["Mar-20-2009", "Mar 20, 2009", "March 20, 2009", "Mar. 20, 2009"," Mar 20 2009"]。

df2 = pd.Series(["Mar-20-2009", "Mar 20, 2009", "March 20, 2009", "Mar. 20, 2009"," Mar 20 2009"])
df2.str.extractall(r'(?:\d{2} )?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]* (?:\d{2}, )?\d{4}')

实际上,它与任何日期都不匹配,我的预期输出是 ["2009 年 3 月 20 日"、"2009 年 3 月 20 日"、"2009 年 3 月 20 日"]。 错误截图

标签: python-3.xregexpandasregex-group

解决方案


您所有带括号的表达式都是非捕获组 (?:),因此错误消息是正确的。如果要捕获表达式,请不要使用 ?: 将其放在括号中。照原样,模式将匹配,但不会捕获任何组。


推荐阅读