python - 用于从数据帧中提取子字符串的正则表达式模式
问题描述
我有一个数据框列,如下所示:
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)
首先,我的正则表达式构造甚至无法根据需要发现任何一对子字符串。
解决方案
您可以使用:
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
推荐阅读
- ios - 在目标 c 中通过手势在图像上画线
- python - sklearn 中用于 10cv SVM 回归的分类(字符串)特征
- php - PHP 标头在 WordPress ajax 调用中不起作用
- mysql - 加入 3 个表并选择计数
- excel - 将多列数据拆分为行
- selenium - 如何在appium中上传文件以实现移动应用自动化?
- reporting-services - 需要将 Microstrategy 报告转换为 SSRS 平台的最佳实践或工具
- mongodb - mongodb $facet 未接受的结果
- python - 如何在 Pandas 中去除字符串列开头和结尾的标点符号
- mysql - Ejabberd Disco Itam 不来