Python正则表达式提取宽度x深度x高度

Posted

技术标签:

【中文标题】Python正则表达式提取宽度x深度x高度【英文标题】:Python Regex Extract Width x Depth x Height 【发布时间】: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

有什么帮助吗? 提前致谢

【问题讨论】:

也许regex101.com/r/v52Cwd/1 【参考方案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+ 替换为\d1,3,如regex、\d1,3\s*x\s*\d1,3(?:\s*x\s*\d1,3)? 所示。

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

(\d1,3\s*x\s*\d1,3(?:\s*x\s*\d1,3)?)

【讨论】:

我很抱歉@Arvind,我复制粘贴时出错了。我的意思是,当我将您的正则表达式放入我的代码中时,出现此错误:“ValueError:模式不包含捕获组”我的代码:df.Description.str.extract(r\d+\s*x\s*\d+(?:\s*x\s*\d+)?') 你知道为什么吗?再次感谢 @AndréBatista - 不用担心。如果您的代码要求您使用组,请将正则表达式放在括号内,例如df.Description.str.extract(r'(\d1,3\s*x\s*\d1,3(?:\s*x\s*\d1,3)?)')。 Regex demo. 完美!它正在工作!非常感谢@Arvind

以上是关于Python正则表达式提取宽度x深度x高度的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达提取方法

python 正则表达式 提取网页中标签的中文

正则表达式 <img > 标签解析与 src、宽度、高度

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

使用 XPath 和正则表达式提取 HTML 注释中的文本

python正则表达式学习