【问题标题】:Python Regex Extract Width x Depth x HeightPython正则表达式提取宽度x深度x高度
【发布时间】:2021-10-03 10:44:16
【问题描述】:

我正在尝试从 df 中的“描述”列中提取项目的物理尺寸,以使用它创建一个新列。

尺寸通常以这种格式 (120x80x100) 出现在长描述的中间,例如:

Lorem ipsum dolor sit amet, consectetur adipiscing elit 120x80x100 ed do eiusmod tempor...

但有时在:

120 x 80 x 100

或者没有身高:

120x80
120 x 80

有什么帮助吗? 提前致谢

【问题讨论】:

标签: python regex pandas extract


【解决方案1】:

这样的事情应该可以工作:

\d+(\s?x\s?\d+){1,2}

【讨论】:

    【解决方案2】:

    我们可以尝试使用re.findall 方法和覆盖所有可能维度格式的正则表达式模式:

    inp = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit 1. 20x80x100 ed do 120 x 80 x 100 eiusmod 120x80 tempor...'
    dims = re.findall(r'\d+(?:\s*x\s*\d+){1,2}', inp)
    print(dims)  # ['120x80x100', '120 x 80 x 100', '120x80']
    

    【讨论】:

    • 感谢您的回答。它工作得很好,但我需要从超过 10000 行的项目描述列中提取并创建一个包含项目维度的新列。
    【解决方案3】:

    您可以使用regex\d+\s*x\s*\d+(?:\s*x\s*\d+)?

    说明:

    • \d+:一位或多位数字
    • \s*: 零个或多个空白字符
    • x:文字,x
    • (?:\s*x\s*\d+)?:可选非捕获组

    如果您希望数字为一到三位数,请将\d+ 替换为\d{1,3},如regex\d{1,3}\s*x\s*\d{1,3}(?:\s*x\s*\d{1,3})? 所示。

    如果您的代码要求您使用组,请执行以下操作:

    (\d{1,3}\s*x\s*\d{1,3}(?:\s*x\s*\d{1,3})?)
    

    【讨论】:

    • 我很抱歉@Arvind,我复制粘贴时出错了。我的意思是,当我将您的正则表达式放入我的代码中时,出现此错误:“ValueError:模式不包含捕获组”我的代码:df.Description.str.extract(r\d+\s*x\s*\d+(?:\s*x\s*\d+)?') 你知道为什么吗?再次感谢
    • @AndréBatista - 不用担心。如果您的代码要求您使用组,请将正则表达式放在括号内,例如df.Description.str.extract(r'(\d{1,3}\s*x\s*\d{1,3}(?:\s*x\s*\d{1,3})?)')Regex demo.
    • 完美!它正在工作!非常感谢@Arvind
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2012-05-30
    • 2021-12-18
    相关资源
    最近更新 更多