繁体   English   中英

Windows文件路径的Python正则表达式

[英]Python regular expression for Windows file path

这个问题(使用正则表达式可能无法轻松解决)是我希望能够从任意字符串中提取Windows文件路径。 我能够(我尝试了很多其他方法)最接近的方法是使用以下正则表达式:

[a-zA-Z]:\\([a-zA-Z0-9() ]*\\)*\w*.*\w*

它选择了文件的开头,旨在查看字符串的模式(在初始驱动器号之后),后跟反斜杠,并以文件名,可选点和可选扩展名结尾。

困难是接下来发生的事情。 由于最大路径长度为260个字符,因此我只需要计算起始位置以外的260个字符。 但是,由于文件名中允许使用空格(和其他字符),因此我需要确保没有其他反斜杠,这些反斜杠可以表明先前的字符是文件夹的名称,而后面的不是文件名本身。

我可以肯定没有完美的隔离(完美是商品的敌人),但我想知道是否有人可以提出“最佳可能”解决方案?

这是基于您的表达式,使我能够在Windows上获取路径: [a-zA-Z]:\\\\((?:[a-zA-Z0-9() ]*\\\\)*).* 此处提供了使用示例: https : //regex101.com/r/SXUlVX/1

首先,我将捕获组从([a-zA-Z0-9() ]*\\\\)*更改为((?:[a-zA-Z0-9() ]*\\\\)*)
您的原始表达式一个接一个地捕获每个XXX\\ (例如: Users\\ Users\\ )。
我的比赛(?:[a-zA-Z0-9() ]*\\\\)* 这使我可以在捕获之前捕获XXX\\YYYY\\ZZZ\\的串联。 因此,它使我获得了完整的途径。

我所做的第二个更改与文件名有关:我将匹配不包含\\任何字符组(捕获组为贪婪的)。 这使我可以处理奇怪的文件名。

另一个有效的正则表达式为: [a-zA-Z]:\\\\((?:.*?\\\\)*).* ,如本例所示: https : //regex101.com/r/SXUlVX/ 2

这次,我使用.*?\\\\来匹配路径的XXX\\部分。
.*? 将以非贪婪的方式进行匹配:因此, .*?\\\\将匹配文本的最少部分,后跟一个反斜杠。

如果您对表达式有任何疑问,请不要犹豫。
我也鼓励您尝试使用https://regex101.com来查看表达式的效果。 这也列出了您可以在正则表达式中使用的不同令牌。

编辑:由于我以前的答案不起作用(尽管我需要花一些时间来找出确切的原因),我正在寻找另一种方法来做你想要的。 我设法使用字符串拆分和连接来做到这一点。
命令是"\\\\".join(TARGETSTRING.split("\\\\")[1:-1])
它是如何工作的:将原始字符串分成多个子字符串列表。 然后,我删除第一部分和最后一部分( [1:-1]到最后一个之前的部分),然后将结果列表转换回字符串。

无论给定的值是路径还是文件的完整地址,此方法均有效。 Program Files (x86)\\\\Adobe\\\\Acrobat Distiller\\\\acrbd.exe fred是文件路径Program Files (x86)\\\\Adobe\\\\Acrobat Distiller\\\\acrbd.exe fred\\是目录路径

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM