You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则表达式捕获数字组异常:仅匹配最后一位数字的技术问询

正则捕获尺寸数字仅得到最后一位的问题解决

问题描述

需要从两个格式略有差异的印尼语文本字符串中,捕获长度、深度、高度对应的完整数字(预期结果类似(76, 40, 120))。两个字符串示例如下:

string1 = """
    Rak penyimpanan berbentuk high chest dengan gaya American Country.  Cocok digunakan untuk menyimpan 
segala keperluan hunian Anda! Dibuat dengan rangka kayu mahoni, papan mdf dan finishing cat duco berkualitas.  Kualitas ekspor akan menjamin kepuasan 
Anda.  Dikirim jadi, tanpa perakitan. Panjang 76 cm Kedalaman 40 cm Tinggi 120 cm
"""

string2 = """
    Rak penyimpanan berbentuk high chest dengan gaya American Country.  Cocok digunakan untuk menyimpan 
segala keperluan hunian Anda! Dibuat dengan rangka kayu mahoni, papan mdf dan finishing cat duco berkualitas.  Kualitas ekspor akan menjamin kepuasan 
Anda.  Dikirim jadi, tanpa perakitan. P 76 cm L 40 cm T 120 cm
"""

编写的正则模式如下:

pattern = r'(\bP|Panjang\b).+(\d)+.+(\bL|Kedalaman\b).+(\d)+.+(\bT|Tinggi\b).+(\d)+.[cm]+'

测试后发现捕获组仅能匹配到每个数字的最后一位(比如(6,0,0)),明明已经在\d后添加了+,请问问题出在哪里?

问题原因

核心问题出在重复捕获组的写法上:(\d)+表示“重复捕获单个数字字符,每次捕获都会覆盖之前的捕获结果”。比如匹配76时,第一次捕获7,第二次捕获6并覆盖掉之前的7,最终捕获组里只留下最后一位6。

另外原正则里的.+是贪婪匹配,可能会跳过中间的内容导致匹配不准确;.[cm]+的写法也不够严谨(.会匹配任意单个字符,可能误匹配非空格的字符)。

解决方法

1. 修正捕获组写法

把(\d)+改成(\d+),让捕获组一次性匹配并捕获整个数字序列,而不是逐位覆盖。

2. 优化正则匹配逻辑

用\s+匹配空格,\s*匹配可选空格,避免贪婪匹配的.+导致的问题,同时精准匹配cm部分。修改后的正则如下:

pattern = r'(\bP|Panjang)\s+(\d+)\s*cm\s+(\bL|Kedalaman)\s+(\d+)\s*cm\s+(\bT|Tinggi)\s+(\d+)\s*cm'

3. 提取结果示例

用Python的re.search提取捕获组:

import re

match1 = re.search(pattern, string1)
if match1:
    panjang = match1.group(2)
    kedalaman = match1.group(4)
    tinggi = match1.group(6)
    print(f"({panjang}, {kedalaman}, {tinggi})")  # 输出:(76, 40, 120)

match2 = re.search(pattern, string2)
if match2:
    panjang = match2.group(2)
    kedalaman = match2.group(4)
    tinggi = match2.group(6)
    print(f"({panjang}, {kedalaman}, {tinggi})")  # 输出:(76, 40, 120)

内容的提问来源于stack exchange,提问作者Michael Halim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:15:30