我有以下字符串:
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)'
我想提取MDSYS.SDO_ORDINATE_ARRAY之后的值,并将它们配对并存储为列表。到目前为止我都试了些什么?
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:
op.append("({})".format(", ".join(re.findall(r"\d+", m.group(1)))))
print(op)
这不会将数字配对。它只是保存为一个带括号的列表。如何将括号中的值配对并另存为列表。
所需输出:
[(22027, 22943), (22026, 22939), (22025, 22936), (22025, 22932), (22027, 22929), (22030, 22926)]
发布于 2021-06-10 14:28:03
你并不真正需要正则表达式。只需链接一些.split()函数并映射出对:
split_string_1 = "MDSYS.SDO_ORDINATE_ARRAY("
split_string_2 = ")"
data = list(map(int, ip.split(split_string_1)[1].split(split_string_2)[0].split(", ")))
result = list(zip(data[:-1], data[1:]))
结果:
[(22027, 22943),
(22943, 22026),
(22026, 22939),
(22939, 22025),
(22025, 22936),
(22936, 22025),
(22025, 22932),
(22932, 22027),
(22027, 22929),
(22929, 22030),
(22030, 22926)]
https://stackoverflow.com/questions/67923075
复制