[英]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})
如果要使用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.