问题描述
我正在尝试从文本数据中提取日期。当我在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
这里您要创建一个与所有这些正则表达式匹配的捕获组。