正则表达式解析文件路径

时间:2012-08-08 10:56:13

标签: regex regex-greedy

我有这样的文字:

  

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

我需要解析文件路径c:\Users\Path1\Path2\Strategies\Path3c:\Users\Path1\Path2\Strategies\Path3\CustomStrategy.PDB,无论哪种更容易。我试图使用以下正则表达式

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

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

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

3 个答案:

答案 0 :(得分:2)

非贪婪的回复:

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

?之后注意+

此外,如果您的路径除最后一个之外不包含任何点,您可以这样写:

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

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

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

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

\w:\S+

答案 1 :(得分:1)

这个怎么样?

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

here on Regexr

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

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

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

答案 2 :(得分:0)

实际上,在这里你也可以没有正则表达式。 按'拆分文本并使用第二部分。


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

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

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