我有这样的文字:
创建调试信息文件时出现意外错误 '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}
但是,此RegEx不会在第一个文件扩展名处停止并继续匹配路径的第二个实例,在.pdb的第二个实例处停止;从而将两个文件路径放在一个正则表达式匹配中。
为了让正则表达式将两条路径解析为两个单独的匹配,我需要更改什么?感谢。
答案 0 :(得分:2)
非贪婪的回复:
\w:.+?[.]\w{3}
在?
之后注意+
。
此外,如果您的路径除最后一个之外不包含任何点,您可以这样写:
\w:[^.]+[.]\w{3}
如果您不确定扩展名是否包含三个字母,则必须指定范围:
\w:[^.]+[.]\w{1,3}
当你不确定你的路径是否有扩展,但它不包含空格时,那么:
\w:\S+
答案 1 :(得分:1)
这个怎么样?
\w:\\(?:[^\\\s]+\\)+
\w:\\
匹配单词字符:
和反斜杠
(?:[^\\\s]+\\)+
匹配目录,非反斜杠或非空格字符,直到反斜杠,然后重复。
因此,这将匹配两个路径c:\Users\Path1\Path2\Strategies\Path3
。只要目录名称不包含空格,就可以正常工作。
答案 2 :(得分:0)
实际上,在这里你也可以没有正则表达式。
按'
拆分文本并使用第二部分。
对于正则表达式,我会使用更复杂的东西,但允许捕获其他文件名,而不仅仅是以3个字母的扩展名结尾:
'([a-z]:(?:[\\/][^\\/]*)+?)' --
(并使用匹配中的第一个子模式)