簡體   English   中英

如何編寫正則表達式以匹配多個文件路徑

[英]How to write a regex to match multiple file path

我想要匹配位於多個目錄中的文件:

文件路徑可以是本地 - C:/users/path/image.png或在系統上 - /home/user/web/image.png

對於第一種情況,我有正則表達式 -

[c|C]:[^.]+[.][A-Za-z]{3}

如何才能使用單個正則表達式來匹配這兩種情況?

嘗試

((c|C|//home)[^.]+[.][A-Za-z]{3})

正則表達式可視化

Debuggex演示

如果要使用findall() ,則所有匹配都將顯示在元組列表中。 元組包含正則表達式中的組,這是上面的正則表達式的關鍵 - 整個表達式必須是一個組本身,以顯示在findall()的返回值中。 請參閱以下代碼

smth = "//home/user/web/image.png C:/users/path/image.png c:/web/image.png"
ip = re.findall("((c|C|//home)[^.]+[.][A-Za-z]{3})",smth)
print ip
[('//home/user/web/image.png', '//home'), ('C:/users/path/image.png', 'C'), ('c:/web/image.png', 'c')]

你想從比賽中得到什么並不清楚 - 也許你只想要完整的字符串?

((?:(?:[cC]:)|//home)[^\.]+\.[A-Za-z]{3})

點( . )將匹配(接近)所有內容。 如果你想比較和對比字符串. ,你應該用\\.來逃避它\\.

試運行:

>>> print re.match("((?:(?:[cC]:)|//home)[^\.]+\.[A-Za-z]{3})", "//home/user/web/image.png").groups()
('//home/user/web/image.png',)

>>> print re.match("((?:(?:[cC]:)|//home)[^\.]+\.[A-Za-z]{3})", "C:/users/path/image.png").groups()
('C:/users/path/image.png',)

一個用於通常的Windows路徑語法:

>>> print re.match("((?:(?:[cC]:)|//home)[^\.]+\.[A-Za-z]{3})", "C:\users\path\image.png").groups()
('C:\\users\\path\\image.png',)

如果需要支持.jpeg ,請將擴展名的最大允許出現次數從{3}增加到{3,4}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM