C# Regex获取路径中的文件夹和文件名部分
我试图将一个部分URL路径解析为3组C# Regex获取路径中的文件夹和文件名部分,c#,.net,regex,C#,.net,Regex,我试图将一个部分URL路径解析为3组 第1组-作业或文档 组2-文件夹路径(如果文件直接位于作业或文档下,则为空) 组3-文件名(如果只指定了文件夹路径,则为空) e、 g /Jobs/STU0001/Folder1/Sub Folder A/File Name.txt-应在所有组上匹配 /文档/文件夹2-应在组1和组2上匹配 /Docs/other File.doc-应在组1和组3上匹配 我尝试了以下方法(以及其他类似的细微变化),但无法得到一种适合所有可能输入的模式 ^/?(作业文档
- 第1组-作业或文档
- 组2-文件夹路径(如果文件直接位于作业或文档下,则为空)
- 组3-文件名(如果只指定了文件夹路径,则为空)
- /Jobs/STU0001/Folder1/Sub Folder A/File Name.txt-应在所有组上匹配
- /文档/文件夹2-应在组1和组2上匹配
- /Docs/other File.doc-应在组1和组3上匹配
^/?(作业文档)/(.*)/(.+\..+)$
-适用于1,而不是2或3
^/?(作业|文档)/(.*)/?(.+\..+)$
-适用于2,而不是1或3
有关信息:
- 文件名将始终有一个扩展名(因此有一个句号/句点)
- 文件夹名称中永远不会有句号/句号
\/?(作业文档)(?:\/(.+)(?=\/))?(?:\/?([^\.]+\.[a-z]+))?
输出:
Match 1
Full match 0-48 `/Jobs/STU0001/Folder1/Sub Folder A/File Name.txt`
Group 1. 1-5 `Jobs`
Group 2. 6-34 `STU0001/Folder1/Sub Folder A`
Group 3. 35-48 `File Name.txt`
Match 2
Full match 49-71 `/Docs/Another File.doc`
Group 1. 50-54 `Docs`
Group 3. 55-71 `Another File.doc`
Match 3
Full match 72-86 `/Docs/Folder 2`
Group 1. 73-77 `Docs`
Group 2. 78-86 `Folder 2`
另一个:
^/(Docs|Jobs)(?:/([^.\n]*))?(?:/([^/\n]+\.[^/\n]+))?$
分崩离析:
^
行的开头
/
初始斜杠
(Docs | Jobs)
捕获第一个目录
(?:/([^.\n]*)?
匹配斜杠并捕获文件夹部分
(?:/([^/\n]+\.[^/\n]+)?
匹配斜杠并捕获文件名部分
$
字符串结尾
目录部分基本上可以包含除句点和换行之外的任何内容
文件名部分必须包含三个部分:1)文件名不包含斜杠或换行符,2)句点,以及3)扩展名不包含斜杠或换行符
两者都是可选的
.为什么不使用标准方法
System.IO.Path.GetFileName(文件)
仅获取文件名,System.IO.Path.GetDirectoryName(文件)
获取文件夹信息。如果你想要部分,你可以用“\”来分割后者。正则表达式是邪恶的,永远不要使用it@AlekDepler正则表达式在很多情况下都非常有用。而不是那些可以通过机载方法更快、更可靠地解决的问题