我有一个包含可变数量反斜杠的字符串。现在我想只收集最后两个反斜杠之间的部分(字母)。
所以,如果我有/this/is/a/string/blablablablabla
我想要捕获string
,如果我有/this/is/a/longer/string/than/the/one/before/baba
,我想捕获before
。
我试过的是:
Regex.Match(myString, @"/(.*)/.*$").Groups[0].Value
但是它捕获了第一个斜杠之间的所有内容以及最后一个之后的内容,我希望它介于最后一个到最后一个之间。我对正则表达式很陌生,希望有人可以帮助我。
leon的最后一个答案是/([^/]*)/[^/]*$
,但这会捕获最后一个/之后的所有内容,并且还包括第一个/
。
我该如何解决这个问题?
答案 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)