如何使用正则表达式(regexp)提取Bounding Box文本中的坐标数字?
当然可以用正则表达式实现,这比手动拆分高效太多了!
针对你给出的Bounding box文本,正则表达式能精准提取出目标数字,而且代码非常简洁。这里给你两种实用的方案:
方案1:精准匹配Bounding box格式(推荐)
如果文本格式固定,比如总是以(Xmin, Ymin) - (Xmax, Ymax) : (数字, 数字) - (数字, 数字)结尾,我们可以写一个完全匹配该结构的正则,直接提取四个目标数字:
import re # 你的原始文本 bbox_text = 'Bounding box for object 1 "PASpersonWalking" (Xmin, Ymin) - (Xmax, Ymax) : (160, 182) - (302, 431)' # 正则模式:匹配括号里的四个数字 pattern = r'\((\d+), (\d+)\) - \((\d+), (\d+)\)$' match_result = re.search(pattern, bbox_text) if match_result: # 提取四个数字并转成整数类型 xmin, ymin, xmax, ymax = map(int, match_result.groups()) print(f"提取结果:Xmin={xmin}, Ymin={ymin}, Xmax={xmax}, Ymax={ymax}") # 输出:提取结果:Xmin=160, Ymin=182, Xmax=302, Ymax=431
这个方案的好处是不会受到文本中其他数字干扰(比如这里的object 1里的数字1),匹配精度更高。
方案2:提取所有数字后筛选
如果文本格式偶尔有变化,但目标数字始终是最后四个整数,也可以直接提取所有数字再取后四个:
import re bbox_text = 'Bounding box for object 1 "PASpersonWalking" (Xmin, Ymin) - (Xmax, Ymax) : (160, 182) - (302, 431)' # 提取所有连续数字 all_numbers = re.findall(r'\d+', bbox_text) # 取最后四个并转成整数 target_numbers = list(map(int, all_numbers[-4:])) print(f"提取结果:{target_numbers}") # 输出:提取结果:[160, 182, 302, 431]
这种写法更灵活,适合格式不太固定的场景。
对比手动拆分字符串(比如按空格、逗号、括号切割再筛选),正则表达式只需要几行代码就能完成,逻辑更清晰,后期维护也更简单。
内容的提问来源于stack exchange,提问作者Darlyn
相关产品推荐
相关产品推荐

