PANDAS在字符串列中找到确切的单词和单词(multiple)之前的单词,并将其追加到python中的新列中

PANDAS在字符串列中找到确切的单词和单词(multiple)之前的单词,并将其追加到python中的新列中,python,regex,pandas,Python,Regex,Pandas,Dataframe看起来像这样 这段代码我试图实现这个功能,但无法获得预期的输出。如果有任何帮助,我将不胜感激 下面是我使用正则表达式处理的代码: df['col_a'].str.extract(r"([a-zA-Z'-]+\s+PY)\b") 期望输出: 简单模式将提取所需字符串:\w+\s+PY 说明:\w+匹配一个或多个单词字符,然后\s+匹配一个或多个空格,后跟PY 简单模式将提取所需字符串:\w+\s+PY 说明:\w+匹配一个或多个单词字符,然后\s+匹配一个或多个空格,后跟PY

Dataframe看起来像这样

这段代码我试图实现这个功能,但无法获得预期的输出。如果有任何帮助,我将不胜感激

下面是我使用正则表达式处理的代码:

df['col_a'].str.extract(r"([a-zA-Z'-]+\s+PY)\b")
期望输出:


简单模式将提取所需字符串:\w+\s+PY

说明:\w+匹配一个或多个单词字符,然后\s+匹配一个或多个空格,后跟PY


简单模式将提取所需字符串:\w+\s+PY

说明:\w+匹配一个或多个单词字符,然后\s+匹配一个或多个空格,后跟PY

使用@Michal的正则表达式:

import re
def app(row):
    return ' '.join(re.findall(r'\w+\s+PY', row.col_a))

df['col_b_PY'] = df.apply(app, axis=1)
您需要连接应用函数中每一行的所有匹配项。使用extractall也可以做到这一点,但我发现这更简单、更直接。

使用@Michal的正则表达式:

import re
def app(row):
    return ' '.join(re.findall(r'\w+\s+PY', row.col_a))

df['col_b_PY'] = df.apply(app, axis=1)

您需要连接应用函数中每一行的所有匹配项。使用extractall也可以做到这一点,但我发现这更简单、更直接。

@Balu奇怪,在演示中,它显示它可以根据需要捕获。请看演示。@Balu,问题不在于正则表达式,而是关于捕获第二个模式的代码。只需使用。。df['col_a'].applylambda x:''.joinre.findall'\w+\s+PY',x@BaluThe regex是正确的,但您需要连接所有匹配项together@Balu若你们觉得答案有帮助,你们可以选择向上投票。@Balu奇怪,在演示中,它显示了它可以根据需要捕获。请看演示。@Balu,问题不在于正则表达式,而是关于捕获第二个模式的代码。只需使用。。df['col_a'].applylambda x:''.joinre.findall'\w+\s+PY',x@BaluThe regex是正确的,但您需要连接所有匹配项together@Balu如果你觉得这个答案有帮助,你可以选择向上投票。
import re
def app(row):
    return ' '.join(re.findall(r'\w+\s+PY', row.col_a))

df['col_b_PY'] = df.apply(app, axis=1)