【问题标题】:Divide a string into pairs将字符串分成对
【发布时间】:2023-04-04 19:11:01
【问题描述】:

我有以下字符串:

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)]

【问题讨论】:

    标签: python string substring extract re


    【解决方案1】:

    你真的不需要正则表达式。只需链接一些 .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)]
    

    【讨论】:

    • 谢谢。但是,如果字符串包含浮点数,我该如何使用它?提前致谢!
    • list(map(int 部分将int 更改为float。或者,如果你只想要整数,你可以只使用float,然后处理悬空的.0
    猜你喜欢
    • 2021-01-16
    • 2016-12-08
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多