[英]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.