pandas str.extractall查找未知数量的组/正则表达式

时间:2018-09-01 17:04:08

标签: python regex pandas

经过一些搜索,我似乎显得有些空白。我也是一个总的正则表达式...

我有一个csv文件,其数据如下:

header1   header2
row1      "asdf (qwer) asdf"
row2      "asdf (hghg) asdf (lkjh)"
row3      "asdf (poiu) mkij (vbnc) yuwuiw (hjgk)"

为清楚起见,我在header2中的行周围加了双引号。

我想提取方括号()之间每个出现的单词。每行至少出现一次,但我不知道提前多少行出现在方括号中。

使用出色的https://www.regextester.com/我认为我需要的正则表达式是\(.*?\)

但我不断得到:

ValueError: pattern contains no capture groups

我使用的代码是:

pattern = r'\(.*?\)' extracted = df.loc[:, 'header2'].str.extractall(pattern)

任何帮助表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:2)

您需要在括号内包含一个捕获组。另外,在使用buildscript { repositories { google() jcenter() } ..... allprojects { repositories { google() jcenter() } } 时,我会使用extractall使其与您DataFrame的结构匹配:

unstack

df.header2.str.extractall(r'\((.*?)\)').unstack()

如果您担心性能,请不要使用 0 match 0 1 2 0 qwer NaN NaN 1 hghg lkjh NaN 2 poiu vbnc hjgk 字符串操作:

pandas

pd.DataFrame([re.findall(r'\((.*?)\)', row) for row in df.header2])