筛选两个特殊字符之间的文本

本文关键字:特殊字符 之间 文本 两个 筛选 | 更新日期: 2023-09-27 17:55:37

例如,我有这些字符串:

"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

提前感谢!

筛选两个特殊字符之间的文本

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);

嗯,有string.LastIndexOf

var start = line.LastIndexOf('/') + 1;
var end = line.LastIndexOf('_');
var result = line.Substring(start, end - start);

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());
var string = "qwe/qwe/qwe/qwe//qwe/some_numbers_here_blabla.exe";
var start = string.lastIndexOf("/");
var end = string.lastIndexOf("_");
var result = string.substring(start + 1, end);

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