2

在 MS Project 中,任务可以链接到多个其他任务,这些任务可以驻留在单独的(外部)项目文件中。获得对这些外部链接任务的引用的唯一方法是解析出“Predecessors”字段,它是一个逗号分隔的链接列表。不幸的是,这些外部链接的路径中可能有逗号,因此简单的拆分不起作用。

这是一个带有 3 个链接的示例,第二个是外部链接:

123FS+5d,\\server\文件夹,带逗号\project1.mpp\456,789

对于内部链接,格式可以是以下任何一种:

  • #tk
  • #tk+#d
  • #tk-#d

其中第一个数字是 ID,占位符 tk 可以是 FS、FF、SS 或 SF,可选的最后一部分(滞后)是 +/- # 天。

对于外部链接,链接信息前面是包含路径的文件名,后跟反斜杠。路径可以是 UNC(例如 \\)或映射的驱动器号(例如 L:\)。

一个字段中可以有一个或多个链接,并且所有链接、部分链接或没有链接都可以是外部链接。

我需要一个正则表达式模式来匹配这些链接列表。

感谢您的帮助!

编辑

为了后代的缘故,这是最有效的模式,因为它也匹配来自 Project Server ("<>\file name\123") 的路径

(((<>\\[^\\]+\\)+)|([A-Z]:|\\)\\([^\\]+\\)+)?\d+([FS]{2}([+-]\d+d)?)?(?=,|$)

另请参阅如何获取外部依赖任务的唯一 ID?进一步增强此正则表达式模式。

4

2 回答 2

3

初步答案:

使用您提供的示例的修改版本并放入一堆其他东西,我想出了这个表达式:

,(?=(([A-Z]:|\\)\\([^\\]+\\)+)?\d+([FS]{2}([+-]\d+d)?)?(?=,|$))

它标识了一个逗号,后面跟着你的一种可能的模式,你应该能够用它来分割你的东西(我认为)——如果你有问题,请告诉我,我会尽力帮助——跑去现在开会:-D

编辑:

要匹配链接本身,而不是拆分,请从表达式中删除初始逗号和前瞻,如下所示(将拆分表达式转换为匹配表达式通常是这种情况,但并非总是如此......):

(([A-Z]:|\\)\\([^\\]+\\)+)?\d+([FS]{2}([+-]\d+d)?)?(?=,|$)
于 2012-07-12T18:03:29.943 回答
2

您要求拆分,但匹配更容易,并且需要的正则表达式库中的功能更少:

((?:(?:\\\\|[A-Z]:).*\\)?\d+(?:(?:FS|FF|SS|SF)(?:\+|-)?(?:\d+d)?)?)
于 2012-07-12T18:47:52.020 回答