来自路径字符串的子串

时间:2017-05-09 20:28:32

标签: c# substring

在这样的字符串中(我从Directory.GetFiles()得到字符串)

string temp = "\\folder_name\\file_name.filetype.[somename@somedomain].wallet"

子串的最佳方法是什么:file_name.filetype

我可以这样做:

const string source = ".[somename@somedomain].wallet";
temp.Substring(0, temp.IndexOf(source, StringComparison.Ordinal));

...但问题是"邮件" in string"。[xxxx @ xxxx] .wallet"正在改变,用我的话来说,我的字符串来源应该是这样的:

const string source = ".[*].wallet"; //so all strings that are in .[all_strings].wallet

有没有一种简单的方法可以做这样的事情(用星号" *"),或者我必须逐个子串并连接这个新字符串?

3 个答案:

答案 0 :(得分:2)

你可以构造一个正则表达式,它需要在感兴趣的子字符串之前使用反斜杠,并且在方括号中的文本最后跟.wallet

以下是使用C#regex API的方法:

string temp = @"\folder_name\file_name.filetype.[somename@somedomain].wallet";
var m = Regex.Match(temp, @"(?<=\\)[^.]*\.[^.]*(?=\.\[[^\]]*\].wallet)");
if (m.Success) {
    Console.WriteLine(m.Value);
} else {
    Console.WriteLine("<no match>");
}

Demo.

(?<=...)(?=...)构造是零长度前瞻和后视。它们不包含在m.Value

答案 1 :(得分:0)

您可以搜索function confirmEnding (str, target) { var last = str.charAt(str.length -1); var last2 = target.charAt(target.length -1); return last === last2 ; } 的第二个索引并在该点之前采取所有内容。

.

Working fiddle

答案 2 :(得分:0)

您也可以使用正则表达式来实现这一目标。下面的第一组应该是您正在寻找的。

string temp = "\\folder_name\\file_name.filetype.[somename@somedomain].wallet";

var filenameRegex = new Regex("^.*\\\\(.*)\\.\\[.*\\]\\.wallet$");
var match = filenameRegex.Match(temp);

var result = match.Groups[1];