我正在尝试使用Python解析文件中的url和文件路径。我已经有一个网址正则表达式。
问题
我想要一个从字符串提取文件路径的正则表达式模式。要求:
C:\
,\\
,/
)/
,../
)请在下面修改我的尝试或提出改进模式的帮助。
尝试
这是我到目前为止拥有的regex:
(?:[A-Z]:|\\|(?:\.{1,2}[\/\\])+)[\w+\\\s_\(\)\/]+(?:\.\w+)*
说明
(?:[A-Z]:|\\|(?:\.{1,2}[\/\\])+)
:前面的驱动器号,反斜杠或点划线[\w+\\\s_\(\)\/]+
:任何类似路径的字符-字母数字,斜杠,括号,下划线,... (?:\.\w+)*
:可选扩展名结果
注意:我已经在Python中使用字符串输入列表和re
模块确认了这些结果。
预期
此正则表达式满足我的大多数要求-即在提取大多数文件路径时排除url。但是,我想匹配所有 路径(包括以单个斜杠开头的UNIX样式路径,例如/foo/bar.txt
)而不匹配url。
研究
我没有找到一般的解决方案。大多数工作倾向于满足特定情况。
SO帖子
外部站点
答案 0 :(得分:1)
您可以将问题分为3种替代模式: (请注意,我并未对路径/文件名实施所有字符排除)
这将给出如下信息:
((((?<!\w)[A-Z,a-z]:)|(\.{1,2}\\))([^\b%\/\|:\n\"]*))|("\2([^%\/\|:\n\"]*)")|((?<!\w)(\.{1,2})?(?<!\/)(\/((\\\b)|[^ \b%\|:\n\"\\\/])+)+\/?)
细分:
Wind-Non-Quoted: ((((?<!\w)[A-Z,a-z]:)|(\.{1,2}\\))([^\b%\/\|:\n\"]*))
Wind-Quoted: ("\2([^%\/\|:\n\"]*)")
Unix: ((?<!\w)(\.{1,2})?(?<!\/)(\/((\\\b)|[^ \b%\|:\n\"\\\/])+)+\/?)
Wind-Non-Quoted:
prefix: (((?<!\w)[A-Z,a-z]:)|(\.{1,2}\\))
drive: ((?<!\w)[A-Z,a-z]:) *Lookback to ensure single letter*
relative: (\.{1,2}\\))
path: ([^\b%\/\|:\n\"]*)) *Excluding invalid name characters (The list is not complete)*
Wind-Quoted:
prefix: \2 *Reuses the one from non-Quoted*
path: ([^%\/\|:\n\"]*) *Save as above but does not exclude spaces*
Unix:
prefix: (?<!\w)(\.{1,2})? . or .. not preceded by letters
path: (?<!\/) repeated /name (exclusions as above)
(\/((\\\b)|[^ \b%\|:\n\"\\\/])+) not preceded by /
\/? optionally ending with /
*(excluding the double slashes is intended to prevent matching urls)*