0

我有这段文字:

创建调试信息文件 'c:\Users\Path1\Path2\Strategies\Path3\CustomStrategy.PDB' 出现意外错误 -- 'c:\Users\Path1\Path2\Strategies\Path3\CustomStrategy.pdb: 系统找不到路径指定的。

我需要解析出文件路径,c:\Users\Path1\Path2\Strategies\Path3或者c:\Users\Path1\Path2\Strategies\Path3\CustomStrategy.PDB更容易。我尝试使用以下正则表达式

\w:.+[.]\w{3}

但是,这个正则表达式不会在第一个文件扩展名处停止,而是继续匹配路径的第二个实例,在 .pdb 的第二个实例处停止;因此将两个文件路径放在一个正则表达式匹配中。

为了使正则表达式将两条路径解析为两个单独的匹配项,我需要更改什么?谢谢。

4

3 回答 3

2

非贪婪:

\w:.+?[.]\w{3}

?后注意+

另外,如果你的路径除了最后一个点之外没有点,你可以这样写:

\w:[^.]+[.]\w{3}

如果您不确定扩展名是否由三个字母组成,则必须指定范围:

\w:[^.]+[.]\w{1,3}

如果你不确定你的路径是否有扩展名,但它不包含空格,那么:

\w:\S+
于 2012-08-08T11:00:23.060 回答
1

那这个呢

\w:\\(?:[^\\\s]+\\)+

在 Regexr 上查看

\w:\\匹配单词字符、a:和反斜杠

(?:[^\\\s]+\\)+匹配目录,非反斜杠或非空白字符直到反斜杠,并且重复。

因此,这将匹配两个路径c:\Users\Path1\Path2\Strategies\Path3。只要目录名称不包含空格就可以工作。

于 2012-08-08T11:10:20.830 回答
0

实际上,在这里您也可以完全不使用正则表达式。拆分文本'并使用第二部分。


至于正则表达式,我会使用更复杂的东西,但允许捕获其他文件名,而不仅仅是那些以 3 个字母扩展名结尾的文件名:

'([a-z]:(?:[\\/][^\\/]*)+?)' --

(并使用匹配的第一个子模式)

于 2012-08-08T11:06:17.190 回答