正则表达式:用于提取日期的表达式不适用于Series对象,将引发错误

问题描述

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

_regionManager.Regions[regionName].Views.ToList();

实际上与我的预期输出是[“ 2009年3月20日”,“ 2009年3月20日”,“ 2009年3月20日”]的任何日期都不匹配。 Screenshot of error

解决方法

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

,

您需要像这样用括号将字符串包装在extractall中:

df2 = pd.Series(["Mar-20-2009","Mar 20,2009","March 20,"Mar. 20," 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})')

输出:

                      0
  match                
1 0        Mar 20,2009
2 0      March 20,2009

这里您要创建一个与所有这些正则表达式匹配的捕获组。