在这样的字符串中(我从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
有没有一种简单的方法可以做这样的事情(用星号" *"),或者我必须逐个子串并连接这个新字符串?
答案 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>");
}
(?<=...)
和(?=...)
构造是零长度前瞻和后视。它们不包含在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 ;
}
的第二个索引并在该点之前采取所有内容。
.
答案 2 :(得分:0)
您也可以使用正则表达式来实现这一目标。下面的第一组应该是您正在寻找的。 p>
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];