【发布时间】:2017-03-20 20:39:35
【问题描述】:
所以我已经达到了我的正则表达式能力的极限。我在这里有一个 python 正则表达式来匹配文件路径或文件 uri 与各个部分的命名捕获组。它似乎是工作文件,除了点文件。
MATCH_PATH = re.compile(
r"^(?P<uri>file://)?" + # optional file uri
r"(?P<path>(?:/?[A-Z]{1}:)?" + # start of path capture, optional windows top-level directory
r"[\\/]?" + # optional start separator
r"(?:[\w \-\.]+[\\/])+)" + # path
r"(?P<filename>[\w \-]+)?" + # optional filename
r"\.?(?P<extension>[a-zA-Z0-9]+)?$" # extension optional
)
我可以让它在扩展部分的. 之后通过removing the optional qualifier ? 匹配点文件,但是它不能匹配没有扩展名的文件(例如makefile)或目录。我尝试放置non-capturing group around the dot and the extension group with the optional qualifier,但没有成功:扩展名与文件名分组。我可以调整它以在所有情况下正确匹配扩展名和名称,同时仍然匹配目录吗?
应匹配的输入示例:
/foo/bar.txt
/foo/bar/
/foo/makefile
./foo.txt
/foo/._bar.txt
foo/bar.txt
D:\foo\bar.m3u
file:///var/www/html/index.html
file:///C:/users/me/My Documents/index.html
更新
还需要正确匹配
/foo/bar.tar.gz
/foo/._bar.tar.gz
扩展名为tar.gz,名称分别为bar 和._bar。如果这对于正则表达式来说太复杂了,请告诉我,我可以编写程序代码来拆分和处理。
【问题讨论】:
-
您错过了可能的 . (点)在文件名组中。
标签: python regex python-3.x