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高度的主要内容,如果未能解决你的问题,请参考以下文章