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

使用正则清理多边形坐标字典值时出现re.error错误求助

问题描述

需要从包含命名多边形坐标的文本文件生成字典,键为多边形名称,值为对应的x、y坐标列表。文件多数条目格式规范,示例如下:

Name of polygon
(12.345, 1.2567)
(5.6789, 2.9876)
(9.0345, 3.7654)
(3.4556, 2.3445)

Name of next polygon
(x, y values)

但部分条目存在不规则情况,比如所有坐标在同一行、括号间有多余字符。现有代码尝试生成字典并用正则清理坐标,但运行报错:re.error: nothing to repeat at position 0,代码如下:

with open(fpath, 'r') as infile:
     d = {}

     #split the data into keys and values
     for group in infile.read().split('\n\n'):
         entry = group.split('\n')
         key, *val = entry
            
         d[key] = val
     for value in d.values():
         value = re.split("*[\(.+$\)]*", str(value))

print(d)
解决方案

1. 正则错误原因及修复

你写的正则*[\(.+$\)]*有两个核心问题:

  • 开头的*没有前置匹配项,正则引擎无法识别要重复的内容,这就是报错的直接原因。
  • 括号、.等特殊字符未转义,且逻辑混乱,无法正确提取括号内的坐标内容。

正确思路是用正则匹配提取括号内的内容,而非分割。可以用re.findall(r'\(([^)]+)\)', text)来精准提取所有括号包裹的坐标字符串。

2. 完整可运行代码

以下代码会兼容规则/不规则的条目格式,最终将坐标转换为浮点数对的列表:

import re

fpath = "你的文件路径.txt"
polygon_dict = {}

with open(fpath, 'r') as infile:
    # 按空行分割每个多边形数据组
    for group in infile.read().split('\n\n'):
        group = group.strip()
        if not group:
            continue
        # 拆分多边形名称与坐标行
        lines = group.split('\n')
        poly_name = lines[0].strip()
        # 合并所有坐标行,处理坐标全在同一行的情况
        coords_text = ' '.join(line.strip() for line in lines[1:])
        # 提取所有括号内的坐标对字符串
        coord_strings = re.findall(r'\(([^)]+)\)', coords_text)
        # 将坐标字符串转换为(x,y)浮点数对
        poly_coords = []
        for cs in coord_strings:
            # 分割x、y值,处理可能的多余空格
            x_str, y_str = [s.strip() for s in cs.split(',')]
            try:
                x = float(x_str)
                y = float(y_str)
                poly_coords.append((x, y))
            except ValueError:
                # 跳过无法转换的无效坐标
                continue
        polygon_dict[poly_name] = poly_coords

print(polygon_dict)

代码说明

  • 用re.findall提取所有(...)内的内容,无论坐标是分行排列还是集中在同一行。
  • 对每个坐标字符串做分割和类型转换,同时处理多余空格问题。
  • 加入异常处理,跳过格式无效的坐标,避免程序崩溃。
  • 跳过空数据组,避免生成无效的键值对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:20:55