为了账号安全,请及时绑定邮箱和手机立即绑定

Python 提取字符串中间的文本

Python 提取字符串中间的文本

拉丁的传说 2023-06-06 15:47:58
我想从文本中提取项目的名称。fg['Product'] = pd.Series([' 5 Guys Greasy Burger 3/5LB (24) [51656]', '5 Guys Super Strawberry Shake - (3/4) OZ (9) [5645654], '5 Guys Giant Loaded Double Cheese Burger 1/2LB Buns - 8Z Cups (22) [564654]'])我需要在 df 列中按产品分析的内容fg['Product'] = 'Greasy Burger', 'Super Strawberry Shake', 'Giant Loaded Double Cheese Burger'我尝试了很多东西,但这让我最接近。fg['Product'] = fg['Product'].str.strip('5 Guys').str.replace(r'\[d+\]')但这还差得远呢。模式中的逻辑似乎是去掉“5 Guys”,然后删除第一个数字或第一个连字符“-”之后的所有内容。就是想不通。
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

您可以将正则表达式应用于r"5 Guys ([A-Za-z\s]*)"每个条目,这会在包含所有字母字符和空格后选择组r"5 Guys "。如果名称中也包含数字,您可能必须找到更复杂的模式。我使用在线正则表达式帮助程序来更轻松地创建模式(例如regex101)。

完整代码示例:

import pandas as pd

import re


regex_pattern = r"5 Guys ([A-Za-z\s]*)"


def find_name(full_string):

    match = re.search(regex_pattern, full_string)

    print(match[1])


s = pd.Series([' 5 Guys Greasy Burger 3/5LB (24) [51656]', '5 Guys Super Strawberry Shake - (3/4) OZ (9) [5645654]', '5 Guys Giant Loaded Double Cheese Burger 1/2LB Buns - 8Z Cups (22) [564654]'])

s.apply(lambda x: find_name(x))


查看完整回答
反对 回复 2023-06-06
?
Helenr

TA贡献1780条经验 获得超4个赞

r"5 Guys (.*?)(?=[0-9]|-)"

细节:

  • (.*?): Group1 - 尽可能少的任何字符

  • (?=[0-9]|-):条件(当我们遇到第一个数字或第一个连字符时)停止正则表达式

演示


查看完整回答
反对 回复 2023-06-06
  • 2 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信