从Pandas数据帧中提取短语后面和空格之间的文本



我有一个CSV,其中包含一些数据,我正在将这些数据带入pandas数据帧中。其中一列包含的数据是一个长文本字段,如下所示:

"QB Aaron Rodgers RB Josh Jacobs FLEX Davante Adams";

我想为这个数据帧中的每一行提取出FLEX之后的播放器名称。一般来说,我是regex的新手,尤其是lookahead和lookbehinds,但在术语FLEX 之前,我能够使用这段代码直接获取文本

df.Lineup.str.extract('(w+(?=s+FLEXs))')

但是,我正在尝试在术语FLEX之后的两个单词(全名(。关于如何让它正常工作,有什么想法吗?

为了更清楚起见,在上面的例子中,当前代码导致我得到";Jacobs";回来,但我想要";Davante Adams";

当模式(w+(?=s+FLEXs))匹配1个以上的单词字符时,您会得到匹配的Jacobs,断言右边直接是空白字符,后面跟着FLEX。

相反,您可以使用带有捕获组的模式来匹配FLEX:之后的2个单词

bFLEXs+(w+s+w+)

Regex演示

或者更广泛的匹配:

bFLEXs+(S+s+S+)
  • bFLEX单词边界,匹配FLEX
  • s+匹配1+空白字符
  • (S+s+S+)捕获组1匹配1个+非空白字符、1个+空白字符,再匹配1个以上非空白字符

查看regex演示。

import pandas as pd
strings = ['QB Aaron Rodgers RB Josh Jacobs FLEX Davante Adams']
df = pd.DataFrame(strings, columns=["Lineup"])
df['Lineup'] = df["Lineup"].str.extract(r'bFLEXs+(S+s+S+)')
print(df)

输出

Lineup
0  Davante Adams

如果你想匹配2个或多个单词,你可以使用一个重复的非捕获组:

bFLEXs+(w+(?:s+w+)+)

最新更新