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

如何用Python re.split将SVG路径坐标字符串拆分为嵌套列表?

解决SVG路径坐标拆分嵌套列表的问题

我知道你已经熬了好几个小时折腾这个问题,别慌,咱们一步步把这个SVG路径字符串拆成符合要求的嵌套列表。先说说你当前代码的问题:用re.split(r'[A-Za-z-]', points)会把负号(如果坐标带负数的话)也当成分隔符切掉,还会产生一堆空字符串,根本没法正确分组坐标。

正确的实现思路

咱们分两步来处理:

  • 第一步:把整个路径按**绘制指令(M、c、s等)**拆成独立的路径段,每个段对应一个指令和它的坐标集合
  • 第二步:把每个段里的坐标字符串拆成成对的(x,y)数值,再组合成嵌套列表

完整代码实现

import re

points ="""M445,346c28.8,0,56,11.2,76.4,31.6C541.8,398,553,425.2,553,454s-11.2,56-31.6,76.4C501,550.8,473.8,562,445,562 s-56-11.2-76.4-31.6C348.2,510,337,482.8,337,454s11.2-56,31.6-76.4S416.2,346,445,346 M445,345c-60.2,0-109,48.8-109,109 s48.8,109,109,109s109-48.8,109-109S505.2,345,445,345L445,345z"""

# 第一步:匹配每个指令和对应的坐标字符串
path_segments = re.findall(r'([A-Za-z])([^A-Za-z]+)', points)

# 第二步:处理每个段的坐标,转换成嵌套列表
nested_points = []
for cmd, coords_str in path_segments:
    # 按逗号或空格分割坐标,过滤空字符串,转成float类型
    coords = list(map(float, filter(None, re.split(r'[, ]', coords_str))))
    # 每两个元素一组,组成(x,y)子列表
    coord_pairs = [coords[i:i+2] for i in range(0, len(coords), 2)]
    # 把指令和坐标对一起存入,方便后续区分路径段(如果不需要指令,直接存coord_pairs即可)
    nested_points.append({
        'command': cmd,
        'coordinates': coord_pairs
    })

# 如果你只需要纯坐标的嵌套列表(不带指令),可以用这行生成:
# pure_coords = [pair for segment in nested_points for pair in segment['coordinates']]

# 打印结果验证
for segment in nested_points:
    print(f"指令 {segment['command']}:")
    print(segment['coordinates'])

代码细节解释

  1. 正则匹配路径段:re.findall(r'([A-Za-z])([^A-Za-z]+)', points) 会把每个字母指令(比如M、c、S)和后面的所有非字母字符(也就是坐标部分)匹配出来,返回类似[('M', '445,346'), ('c', '28.8,0,56,11.2,76.4,31.6')]的元组列表
  2. 清理并转换坐标:用re.split(r'[, ]', coords_str)按逗号或空格分割坐标,filter(None, ...)去掉分割后产生的空字符串(比如多个空格的情况),再转成float类型确保数值可用
  3. 分组坐标对:用切片coords[i:i+2]每两个元素一组,得到(x,y)的子列表,最终形成嵌套结构

针对你输入的输出示例

比如第一个M指令对应的坐标会变成[[445.0, 346.0]],c指令对应的坐标会变成[[28.8, 0.0], [56.0, 11.2], [76.4, 31.6]],完全符合嵌套列表的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:09:07