gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:26:23 24 4
gpt4 key购买 nike

我试图掌握正则表达式,我遇到了包含在 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 '\((.*)\)'

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

使用grep,您不能返回捕获组的内容。这可以通过使用 -P 选项的 PCRE regexp 来解决,但它在 Mac 上不可用,例如。 sedawk 也可能在这些情况下有所帮助。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com