python - pandas' `str.extract()` 中带有捕获组的正则表达式的预期行为

标签 python regex pandas capturing-group

我试图掌握正则表达式,并且遇到了 str.extract 方法中包含的正则表达式:

movies['year']=movies['title'].str.extract('.*\((.*)\).*',expand=True)

它应该检测并提取括号中的内容。因此,如果给出这个字符串:foobar (1995),它应该返回1995。但是,如果我打开终端并输入以下内容

echo 'foobar (1995)` | grep '.*\((.*)\).*'

匹配整个字符串,而不是仅匹配括号之间的内容。由于括号的限制,我认为该方法适用于 BRE 风格,grep 也是如此(默认行为)。另外,regex蓝色匹配整个字符串,绿色匹配年份(捕获组)。我在这里错过了什么吗?正则表达式在 python 中完美运行

最佳答案

首先, Pandas 的行为.str.extract()完全符合预期:它仅返回捕获组内容。与 extract 一起使用的模式需要至少 1 个捕获组:

pat : string
Regular expression pattern with capturing groups

如果您使用命名捕获组,新列将以命名组命名。

您提供的grep命令可以简化为

grep '\((.*)\)'

as grep 能够部分匹配行(不需要整行匹配)并在每行基础上工作:一旦找到整个匹配项返回线路。要覆盖该行为,您可以使用 -o 开关。

使用grep,您无法返回捕获组内容。这可以通过使用 -P 选项支持的 PCRE 正则表达式来解决,但它在 Mac 上不可用。 sedawk 在这些情况下也可能有所帮助。

关于python - pandas' `str.extract()` 中带有捕获组的正则表达式的预期行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44852589/

相关文章:

python - 如何在 Python Flask 中创建带有可选参数的 SQL 查询?

python - 使用 float ('nan' ) 来表示缺失值 - 安全吗?

python - 使用 Tkinter,如何让按钮在选择单选选项时出现,然后在不再选择该单选选项时消失?

javascript - 正则表达式:\d 不工作

python - 使用 pandas TimeSeries 创建热图

Python 跳过数字

javascript - 正则表达式在 jquery 中只允许数字和单点

ruby - 正则表达式中的重复和字符类

python - 如何处理 pandas 数据框中的重复字段?

python - 检查一系列数字是否位于 pandas 数据框中的两列之间