如何提取MDSYS.SDO_ORDINATE_ARRAY内数值并两两配对存为列表
解决方案
完整可运行代码如下:
import re op = [] ip = 'MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), MDSYS.SDO_ORDINATE_ARRAY(22027, 22943, 22026, 22939, 22025, 22936, 22025, 22932, 22027, 22929, 22030, 22926)' m = re.search(r"\bMDSYS\.SDO_ORDINATE_ARRAY\(([^()]+)\)", ip) if m: # 提取所有数字并转为整数类型 nums = list(map(int, re.findall(r"\d+", m.group(1)))) # 步长为2遍历,两两拼接为元组 op = [(nums[i], nums[i+1]) for i in range(0, len(nums), 2)] print(op)
运行输出结果和期望完全一致:
[(22027, 22943), (22026, 22939), (22025, 22936), (22025, 22932), (22027, 22929), (22030, 22926)]
核心修改说明:
- 补充了
import re语句,正则模块需要先导入才能正常调用 - 把提取到的数字字符串统一转换为整数类型,避免存储为字符串格式
- 替换原有的字符串拼接逻辑,改为步长为2的列表推导式,每次取相邻两个元素组成元组,直接生成符合要求的结果列表
内容的提问来源于stack exchange,提问作者disukumo
相关产品推荐
相关产品推荐

