REGEX:从字符串中提取路径

时间:2013-05-15 10:44:09

标签: regex

我想以以下形式提取路径:

$ / Server / First Level Folder / Second_Level_Folder / My File.extension

这里的挑战是路径嵌入在“自由格式”电子邮件中,如下所示:

  

您好,

 You can download the file here:
     
      
  • $ / Server / First Level Folder / Second_Level_Folder / My File.extension< - Click me!
  •   

给定一个字符串,我想使用RegEx从中提取所有路径。这甚至可能吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

是的,(\$/.*?\.\S*)可以完成这项工作。

\$/匹配路径的开头

.*?匹配所有内容,直到正则表达式的下一部分

\.\S*匹配点和除空格(空格,制表符)之外的任何内容

围绕它的( )会捕获所有匹配的内容。

修改

供进一步使用

只是路径

(\$/.*?/)[^/]*?\.\S*

只是文件名

\$/.*?/([^/]*?\.\S*)

答案 1 :(得分:1)

如果文件名包含[转义正斜杠/或没有句点符号]并且文件路径空格使用反斜杠'\'进行转义,您仍然可以使用此方法(我已经转义了正斜杠和反斜杠)

(\/.*?\/)((?:[^\/]|\\\/)+?)(?:(?<!\\)\s|$)

Regular expression visualization

Debuggex Demo

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