首页 > 解决方案 > 用于从数据帧中提取子字符串的正则表达式模式

问题描述

我有一个数据框列,如下所示:

df['col1']

['cat-dog asd-pwr sdf', 'cat-goat asd-pwr2 sdf', 'cat asd-pwr3 sdf']

我需要提取以下内容:

['asd-pwr', 'asd-pwr2', 'asd-pwr3']

即通过以下方式连接的最后一对子串-

我尝试了以下方法:

import re
df['col1'].str.extract(r'\s[a-zA-Z]*-[a-zA-Z]*\s', flags=re.IGNORECASE)

首先,我的正则表达式构造甚至无法根据需要发现任何一对子字符串。

标签: pythonregexpandaspython-3.8

解决方案


您可以使用:

import re

df['col1'].str.extract(r'\s*(\w+-\w+)(?!.*-)\s*', flags=re.IGNORECASE)

在这里,我们使用\w而不是[a-zA-Z]因为您还想提取 之后的数字pwr

我们还使用负前瞻(?!.*-)来确保当前匹配的子字符串是字符串中最后一个带有连字符-的子字符串。

结果:

          0
0   asd-pwr
1  asd-pwr2
2  asd-pwr3

推荐阅读