如何用正则表达式从Pandas DataFrame提取多种格式英寸值至尺寸列?
解决英寸格式匹配的正则方案
问题分析
你写的正则存在几个核心漏洞:
- 开头强制要求
\d+,导致无法匹配1/2"这类纯分数格式的英寸值 - 小数部分
\.\d*的位置错误且未设为可选,无法兼容整数或分数格式 - 使用原始字符串(
r'')时,"无需额外转义,转义后反而会匹配\"而非目标字符
正确正则表达式
pattern = r'(?:\d+\s*)?(?:\d+/\d+|\d+\.\d+|\d+)"'
正则逻辑拆解
(?:\d+\s*)?:匹配可选的整数前缀+空格(比如1在1 1/2"中的部分),?:表示非捕获组,避免生成多余分组(?:\d+/\d+|\d+\.\d+|\d+):覆盖三种数值格式,用|分隔分支:\d+/\d+:匹配分数格式(如1/2、3/4)\d+\.\d+:匹配小数格式(如1.5、2.75)\d+:匹配整数格式(如1、10)
":直接匹配转义后的英寸引号(原始字符串模式下无需转义)
测试验证
该正则可精准匹配你列出的所有格式:
1"✅1 1/2"✅1.5"✅1/2"✅
扩展用法
如果需要单独提取数值部分(不含"),可调整为带捕获组的版本:
pattern = r'((?:\d+\s*)?(?:\d+/\d+|\d+\.\d+|\d+))"'
匹配后通过group(1)即可获取纯数值内容。
内容的提问来源于stack exchange,提问作者hydroproxy
相关产品推荐
相关产品推荐

