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

如何在textX中正确解析Windows系统的CSV文件路径?

问题原因

你的报错是三个问题共同导致的:

  • 正则转义层级错误:textX文法文件解析时会做第一次转义,正则传入Python re模块时会做第二次转义,你原本写的\\经过两次转义后无法匹配路径中的反斜杠,还会破坏正则结构。
  • 锚点使用错误:正则末尾的$匹配的是整个输入文件的结束位置,但你的dsl文件中路径后面还有end关键字,必然匹配失败。
  • 字符集覆盖不全:原正则的字符集仅包含字母、冒号、反斜杠,没有覆盖路径中合法的数字、下划线、横杠、文件名前缀的点等字符。
解决方案

提供两种可直接落地的方案,根据你的场景选择即可:

方案1:继续用正则匹配(适合路径无空格的场景)

直接修改Program.tx中的Configuration规则,调整转义逻辑、删除冗余锚点、扩大字符覆盖范围:

Configuration:
    'configuration' location=/[a-zA-Z]:[\\/][\w.\-\\\\/]+\.csv/
;

规则说明:

  • 盘符单独写为[a-zA-Z]:,避免路径中间出现非法冒号
  • [\\/]同时支持Windows反斜杠和通用正斜杠路径
  • 反斜杠写为\\\\,经过两层转义后会被re模块识别为匹配反斜杠的表达式
  • 去掉末尾$锚点,只要路径以.csv结尾即可正常匹配

方案2:改用字符串+代码校验(更稳妥,支持带空格的路径)

这种方案避开了正则多层转义的复杂问题,可维护性更高:

  1. 修改Program.tx的Configuration规则,将路径定义为字符串类型:
Configuration:
    'configuration' location=STRING
;
  1. 修改test.dsl,给路径加上双引号:
begin
    configuration "C:\Users\me\Desktop\test.csv"
end
  1. 在Python代码中新增路径校验逻辑,你之前测试通过的正则可以直接在这里使用:
import re
from textx import metamodel_from_file
from Input import Input

# 直接用你之前测试通过的正则即可,不需要多层转义
CSV_PATH_PATTERN = re.compile(r'[a-zA-Z]:\\[\w.\\-]+\.csv$')

class Robot(object):
    def __init__(self):
        self.input_location = None

    def setInput(self, location):
        self.input = Input(location)

    def interpret(self, model):
        for c in model.commands:
            if c.__class__.__name__ == "Configuration":
                # 新增路径校验逻辑
                if not CSV_PATH_PATTERN.match(c.location):
                    raise ValueError(f"非法CSV路径:{c.location}")
                self.setInput(c.location)

robot_mm = metamodel_from_file('Program.tx')
robot_model = robot_mm.model_from_file('test.dsl')

robot = Robot()
robot.interpret(robot_model)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:15:03