gpt4 book ai didi

python - 用于提取文件路径(不是 url)的通用正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:17 27 4
gpt4 key购买 nike

我正在尝试使用 Python 从文件中解析 url 和文件路径。我已经有一个 url 正则表达式。

问题

我想要一个从字符串中提取文件路径的正则表达式模式。要求:

  • 独家(不包括网址)
  • 独立于操作系统,即 Windows 和 UNIX 风格的路径,例如(C:\, \\, /)
  • 所有路径类型,即绝对和相对路径,例如(/, ../)

请协助修改我在下面的尝试或建议改进的模式。

尝试

这是 regex我到目前为止:

(?:[A-Z]:|\\|(?:\.{1,2}[\/\\])+)[\w+\\\s_\(\)\/]+(?:\.\w+)*

描述

  • (?:[A-Z]:|\\|(?:\.{1,2}[\/\\])+):任何前面的驱动器号、反斜杠或虚线路径
  • [\w+\\\s_\(\)\/]+:任何类似路径的字符 - 字母数字、斜线、括号、下划线……
  • (?:\.\w+)*: 可选扩展名

结果

enter image description here

注意:我已经使用字符串输入列表和 re 模块在 Python 中确认了这些结果。

预期

此正则表达式满足我的大部分要求 - 即在提取大多数文件路径时排除 url。但是,我想匹配所有路径(包括以单斜杠开头的 UNIX 样式路径,例如 /foo/bar.txt)而不匹配 url。

研究

我还没有找到通用的解决方案。大多数工作倾向于满足特定情况。

SO 帖子

外部网站

最佳答案

您可以将问题分成 3 种替代模式:(请注意,我没有为路径/文件名实现所有字符排除)

  • 不带引号的 Windows 路径
  • 引用 Windows 路径
  • unix 路径

这会给出这样的东西:

((((?<!\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)*

关于python - 用于提取文件路径(不是 url)的通用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54990405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com