我有这样的字符串:
“ d:\ tmp \ abc_list.csv”
“ d:\ tmp \ xyzx_list.csv”
“ d:\ tmp \ qwert_list.csv”
我需要使用文件名的第一部分:abx,xyzc,qwert。我现在这样做是:
string name = filename.Substring(filename.LastIndexOf('\\') + 1 , filename.IndexOf('_') - filename.LastIndexOf('\\') - 1);
我觉得应该有更简便,更好的方法。它是什么?
最佳答案
您的解决方案很好,但是如果文件名的另一部分(例如,其目录路径的一部分)带有下划线,则它将中断。您应该对其稍作更改以避免出现此问题:
int pos = filename.LastIndexOf('\\') + 1;
string name = filename.Substring(pos , filename.IndexOf('_', pos) - pos);
如果您的解决方案美观,健壮且易于理解,则没有理由选择更短的解决方案。当然,您可以使用正则表达式,但是生成的单行解决方案的可读性要差得多:
var res = Regex.Matches(s, @"(?<=\\)[^_\\]*(?=_[^\\]*$)")[0].Value;
这是demo of this solution on ideone。
关于c# - 如何获得定号之间的字符串中间部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18532003/