正则表达式的麻烦:如何获得最后两个正斜杠之间的所有内容

时间:2014-02-25 13:03:59

标签: c# regex

我有一个包含可变数量反斜杠的字符串。现在我想只收集最后两个反斜杠之间的部分(字母)。

所以,如果我有/this/is/a/string/blablablablabla我想要捕获string,如果我有/this/is/a/longer/string/than/the/one/before/baba,我想捕获before

我试过的是:

 Regex.Match(myString, @"/(.*)/.*$").Groups[0].Value

但是它捕获了第一个斜杠之间的所有内容以及最后一个之后的内容,我希望它介于最后一个到最后一个之间。我对正则表达式很陌生,希望有人可以帮助我。

leon的最后一个答案是/([^/]*)/[^/]*$,但这会捕获最后一个/之后的所有内容,并且还包括第一个/

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

如果你的字符串中只有一个这样的模式,你可以使用

/(\w+)/[^/]*$

您的数据位于第一个捕获的组中。

[^/]会匹配任何内容但是/\w[0-9a-zA-Z_]的缩写。


编辑:来自OP的评论

Groups[1]是第一个捕获组。所以C#的答案是:

answer = Regex.Match(myString, @"/(\w+)/[^/]*$").Groups[1].Value;

让我们来看看:/表示我们匹配/,然后我们使用(\w+)一个或多个单词捕获,我们停在/。然后我们将斜杠本身与[^/]匹配,我们匹配所有内容直到结束(*$)

答案 1 :(得分:1)

您问题的直接答案是:

/([^/]*)/[^/]*$

或者,由于你的字符串很简单,你可以完全避免正则表达式:

if (input.EndsWith("/"))
    return input.Split('/').Last();
else
    return input.Split('/').Reverse().Skip(1).First();

答案 2 :(得分:0)

试试这个http://regexr.com?38c43

(?:[A-Z /] +)/([A-Z] +)

查看第一个(也是唯一一个)组,它将有最后一个项目。