Python提取字符串中间的文本

Posted

技术标签:

【中文标题】Python提取字符串中间的文本【英文标题】:Python Extract text in middle of string 【发布时间】:2020-12-08 17:46:12 【问题描述】:

我想从文本中提取项目的名称。

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”,然后删除第一个数字或第一个连字符“-”之后的任何内容。就是想不通。

【问题讨论】:

【参考方案1】:

您可以将正则表达式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))

【讨论】:

非常感谢。我尝试了一些 A-Za-z 的组合,但添加了 [0-9]。绝对需要阅读正则表达式。 乐于助人,使用正则表达式帮助器使这些事情变得容易得多。如果回答了您的问题,请标记答案。 已标记。希望我在 Python 方面做得更好,这样我就可以开始帮助人们了 克里斯,如果 5 个人不只是 5 个人,而是现在包括:1324、1324 杯或大批量,也作为主要排除项怎么办? 在正则表达式中你可以使用“|”字符以允许组中的多个选项,例如(5 Guys|abc|cef) ([A-Za-z\s]*)。然后,您必须选择组中的第二个匹配项,因为每个 () 标记一个匹配组。我建议您遵循正则表达式的介绍,例如regexone.com【参考方案2】:
r"5 Guys (.*?)(?=[0-9]|-)"

详情:

(.*?): Group1 - 尽可能少的任意字符 (?=[0-9]|-):条件(当我们遇到第一个数字或第一个连字符时)停止正则表达式

Demo

【讨论】:

谢谢你,比。这个逻辑真的会帮助我前进 @chasedcribbet。不客气。如果我的回答有用,请在回答左边打勾。

以上是关于Python提取字符串中间的文本的主要内容,如果未能解决你的问题,请参考以下文章

python提取指定字符中间的内容?

python 如何提取特定字符中间的内容

python通过正则匹配指定字符开头与结束提取中间内容

python 从文本中提取每一行的特定字符串输出到csv文件

PYTHON关于提取返回JSON结果中特定字段的问题

python编程题 提取首字符?