过滤两个特殊字符之间的文本

时间:2015-06-11 07:18:42

标签: c# string split

例如,我有这些字符串:

"qwe/qwe/qwe/qwe//qwe/somethinghere_blabla.exe"
"qwe/qwe/q//we/qwe//qwe/somethingother_here_blabla.exe"
"qwe/qwe/qwe/qwe//qwe/some_numbers_here_blabla.exe"

现在我想在最后一个' /'之间得到文字。最后一个' _'。 结果将是:

"somethinghere"
"somethingother_here"
"some_numbers_here"

最简单,最清晰的方法是什么?

我不知道怎么做,我应该把它们拆分成' /'和' _',这样分开吗?我怎么也想不出怎么做。

也许从最后扫描字符串直到它到达第一个' /'和' _'?或者有更简单快捷的方式吗?因为它必须扫描~10,000个字符串。

string[] words = line.Split('/', '_'); //maybe use this? probably not

提前致谢!

4 个答案:

答案 0 :(得分:9)

string s = "qwe/qwe/q//we/qwe//qwe/somethingother_here_blabla.exe";
int last_ = s.LastIndexOf('_');
if (last_ < 0) // _ not found, take the tail of string
    last_ = s.Length;
int lastSlash = s.LastIndexOf('/');
string part = s.Substring(lastSlash + 1, last_ - lastSlash - 1);

答案 1 :(得分:2)

嗯,有string.LastIndexOf

var start = line.LastIndexOf('/') + 1;
var end = line.LastIndexOf('_');

var result = line.Substring(start, end - start);

答案 2 :(得分:0)

LINQ方式:

var str = "qwe/qwe/qwe/qwe//qwe/somethinghere_blabla.exe";
var newStr = new string(str.Reverse().SkipWhile(c => c != '_').Skip(1).TakeWhile(c => c != '/').Reverse().ToArray());

答案 3 :(得分:0)

{{1}}

注意:如果字符串在最后一个斜杠后没有/或_,则上面的代码不会处理错误