首页 > 解决方案 > 在熊猫中使用正则表达式从多个括号中提取字符串

问题描述

我正在尝试从 pandas df 中的多个括号中提取多个字符串并创建新列。

以下字符串位于 df 的一列中:

Unfurnished 1 Bdrm 1st flr Flat. Hall. Lounge. Kitch. Bdrm. Shower rm (CT band - A). Deposit & references required. No pets. No smokers. Rent £500 p.m Entry by arr. Viewing Owner 07425 163047 or contact solicitors. Landlord reg: 305350/110/22531. (EPC band - C).

我一直在尝试在 2 个新列中提取 CT 波段和 EPC 波段数据(每个列分别用于每组信息)。我尝试了多个版本的代码,还尝试使用来自https://regex101.com/r/5XjNqh/1的信息

例如:下面的代码

properties['Council_tax']=properties.Description.str.extract('(\(CT[^()*&?%])',expand=False)

返回

(CT

预期输出:

| Description        | Council_tax_band | EPC_band |
|--------------------|------------------|----------|
| Above string       |        A         |     C    | 
| Example string 2   |        B         |     F    |
| Example string 3   |        C         |     D    |

同时,“乐队”这个词也被发现为“乐队”

我不相信我在这里正确地使用了正则表达式。有任何想法吗?

标签: pythonregex

解决方案


您可以使用

df['Council_tab_band'] = df['Description'].str.extract(r'(?i)\(CT\s+band\s*-\s*([^()]+)\)', expand=False)
df['EPC_band'] = df['Description'].str.extract(r'(?i)\(EPC\s+band\s*-\s*([^()]+)\)', expand=False)

请参阅正则表达式演示 #1正则表达式演示 #2

正则表达式详细信息

  • (?i)- 不区分大小写的修饰符
  • \(- 一个(字符
  • EPC- 一个字符串
  • \s+- 1+ 空格
  • band- 一个字band
  • \s*-\s*- 用空格括起来的连字符
  • ([^()]+)(- 第 1 组:除和之外的任何 1 个或多个字符)
  • \)- 一个)字符。

推荐阅读