2016-11-10 181 views
2

是否可以从URL获取文件夹名称?正则表达式从URL中获取文件夹名称

例如,

https://inside.nov.com/wh/pc/testSourceLib/Folder Z/SubFolder Z1/Copy files from one Document Library to another using Nintex Workflow _ My Learnings.pdf 

其中

  • https://inside.nov.com/wh/pc/是Web URL
  • testSourceLib是库名称
  • Folder Z/Subfolder z1的文件夹名称

我需要从上面的URL中提取/Folder Z/Subfolder z1

我试过([^\/]*)$它给我的文件名称为Copy files from one Document Library to another using Nintex Workflow _ My Learnings.pdf

+0

尝试'[^/] +(?=/[^ /] * $)'提取选项。 –

+0

是否有某些原因需要使用正则表达式,而不是使用内置的['Uri.GetComponents'](https://msdn.microsoft.com/en-us/library/system.uri.getcomponents%28v = vs.110%29.aspx)已经做到这一点的方法? –

+0

是的。我正在使用Nintex工作流程,它只需要.net友好的正则表达式,我不能有任何C#代码。 –

回答

1

您可以使用基于正则表达式的前瞻与提取选项:

/[^/]+/[^/]+(?=/[^/]*$) 

regex demo

enter image description here

图案的详细资料

  • [^/]+ - 1个或多个字符比/其它...
  • (?=/[^/]*$) - 随后以比/[^/]*)其它/,零个或多个字符,然后字符串($)的端部。该构造是一个正向前视,它是一个零宽度断言,它不会消耗文本(不会将其放入返回的匹配中),这需要将某些文本放在字符串中当前位置的右侧。

为了缩短模式的一点,你可以包裹/[^/]+子模式与非捕获组和其应用限制量词:

(?:/[^/]+){2}(?=/[^/]*$) 

another demo

+0

这给了我“子文件夹Z1”,但我需要“/文件夹Z /子文件夹Z1 /”作为输出 –

+0

查看更新的答案。 –

+0

谢谢你Wiktor。你拯救了我的一天。谢谢谢谢谢谢。 –