经过一些搜索,我似乎显得有些空白。我也是一个总的正则表达式...
我有一个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)
任何帮助表示赞赏。
谢谢
答案 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])