首页 > 解决方案 > 在特定模式之前删除字符串的一部分

问题描述

我有一个熊猫数据框,其中有一列我必须在其中检索特定名称。唯一的问题是,这些名称并不总是在同一个地方,并且这些列的所有值的长度都不相同,所以我不能使用 split 函数。但是,我注意到在这些名称之前,总是有 4 到 7 位数字的组合。我相信这是名称的标识符。
那么如何使用正则表达式来遍历该列并检索我需要的名称。以下是 jupyter notebook 中的一个示例:

 df['info']
 csx_Gb009_broken screen_231400_Iphone 7
 000345_SamsungS8_tfes_Vodafone_is56t34_3G
 Ins45_56003_Huawei P8_

我想要的是这样的:

 df['Phones']
 Iphone 7
 SamsungS8
 Huawei P8

我想要像上面那样知道这些名称出现在 4 到 7 位数字的组合之前并以下划线结尾。

标签: pythonregexpandas

解决方案


您可以使用

df['Phones'] = df['info'].str.extract(r'\d{4}_([^_]+)')

模式匹配:

  • \d{4}- 4 位数
  • _- 一个下划线
  • ([^_]+)- 捕获组 1(此值将由 返回str.extract):一个或多个除_.

请参阅正则表达式演示


推荐阅读