C#Regex:捕获特定单词之间的文本

时间:2016-03-03 15:22:39

标签: c# regex

我尝试使用正则表达式进行以下提取(标记/ 页面/ 之后的文字):

  • /前缀/标签/ abc /页/ 15
  • /前缀/标签/ abc
  • /前缀/页/ 15

所以,基本上,我需要一个模式,它将从上面的字符串中捕获每组2个组。 结果应该是:

  • 代表第一个字符串:$ 1 = abc和$ 2 = 15
  • 表示第二个字符串:$ 1 = abc,$ 2 =空
  • 代表第三个字符串:$ 1 =空,$ 2 = 15

/prefix/(?:tag)/([^/]+)/(?:page)/([^/]+)模式完全符合我的需要,但仅适用于第一个字符串。如果可以修改它以便它将返回第二个和第三个字符串所需的结果,那将是很好的。

任何帮助将不胜感激! 谢谢,

2 个答案:

答案 0 :(得分:2)

为什么不使用

var folders = myValue.Split('/');
var matches = folders.Skip(1)
    .Where((f, i) => folders[i] == "tag" || folders[i] == "page");

比使用正则表达式更容易阅读并且可能更有效。

答案 1 :(得分:0)

可以帮助你的正则表达式

/(prefix)/(?:tag|page)/([^/]+)

regex demo就在这里。

enter image description here

基本上,正则表达式匹配/后跟prefix(捕获到第1组),然后是/,然后是tagpage,后跟另一个/,然后正则表达式引擎尝试将除/以外的一个或多个字符捕获到第2组。

<强>更新

对于评论中讨论的问题,请尝试以下模式(demo):

(?=\S)(?:(?:/(abc))(?:/[^/]+)*?)?(?:/(\d+))?$

enter image description here