我想以以下形式提取路径:
$/Server/一级文件夹/Second_Level_Folder/我的文件.extension
这里的挑战是路径嵌入在“自由格式”电子邮件中,如下所示:
你好,
You can download the file here:
- $/Server/First Level Folder/Second_Level_Folder/My File.extension <- 点击我!
给定一个字符串,我想使用 RegEx 从中提取所有路径。这甚至可能吗?
谢谢!
我想以以下形式提取路径:
$/Server/一级文件夹/Second_Level_Folder/我的文件.extension
这里的挑战是路径嵌入在“自由格式”电子邮件中,如下所示:
你好,
You can download the file here:
- $/Server/First Level Folder/Second_Level_Folder/My File.extension <- 点击我!
给定一个字符串,我想使用 RegEx 从中提取所有路径。这甚至可能吗?
谢谢!
是的,这是可能的,(\$/.*?\.\S*)应该可以很好地完成这项工作。
\$/匹配路径的开始
.*?匹配所有内容,直到正则表达式的下一部分
\.\S*匹配点和除空格以外的任何内容(空格、制表符)
它的( )周围使它捕捉到所有匹配的东西。
编辑:
供进一步使用
只是路径
(\$/.*?/)[^/]*?\.\S*
只是文件名
\$/.*?/([^/]*?\.\S*)
如果文件名包含[转义的正斜杠/或没有句点符号]并且文件路径空格用反斜杠“\”转义,你仍然可以这样做(我已经转义了正斜杠和反斜杠)
(\/.*?\/)((?:[^\/]|\\\/)+?)(?:(?<!\\)\s|$)

这将创建两个捕获组 - 一个用于路径,一个用于文件基名。如果您的测试字符串包含带有未转义空格的文件名(如图所示),那么您必须按照 B8vrede 的回答使用文件名中的句点作为锚点。