如果我有一个字符串 MCCORMIC 3H R Final 08-26-2011.dwg ,或者甚至 MCCORMIC SMITH 2N L Final 08-26-2011.dwg 和我想要捕获第一个字符串中的 R 或变量中第二个字符串中的 L ,这样做的最佳方法是什么?我正在考虑尝试以下声明,但它不起作用。
string filename = "MCCORMIC 3H R Final 08-26-2011.dwg"
string WhichArea = "";
int WhichIndex = 0;
WhichIndex = filename.IndexOf("Final");
WhichArea = filename.Substring(WhichIndex - 1,1); //Trying to get the R in front of word Final
答案 0 :(得分:3)
按空格划分:
var parts = filename.Split(new [] {' '},
StringSplitOptions.RemoveEmptyEntries);
WhichArea = parts[parts.Length - 3];
看起来文件名的格式非常具体,所以这样就可以了。
即使有任意数量的空格,使用StringSplitOptions.RemoveEmptyEntries
也意味着空格不会成为拆分结果集的一部分。
更新了代码以处理这两个示例 - thanks Nikola。
答案 1 :(得分:2)
我必须做类似的事情,但使用Mirostation图纸而不是Autocad。我在我的案例中使用了正则表达式。这就是我所做的,以防你想让它变得更复杂。
string filename = "MCCORMIC 3H R Final 08-26-2011.dwg";
string filename2 = "MCCORMIC SMITH 2N L Final 08-26-2011.dwg";
Console.WriteLine(TheMatch(filename));
Console.WriteLine(TheMatch(filename2));
public string TheMatch(string filename) {
Regex reg = new Regex(@"[A-Za-z0-9]*\s*([A-Z])\s*Final .*\.dwg");
Match match = reg.Match(filename);
if(match.Success) {
return match.Groups[1].Value;
}
return String.Empty;
}
答案 2 :(得分:2)
我认为Oded's answer不包括所有情况。第一个例子在通缉信之前有两个单词,第二个单词在它之前有三个单词。
我的观点是,获取此信函的最佳方式是使用RegEx,假设单词Final
始终位于字母本身之后,由任意数量的空格分隔。
以下是RegEx代码:
using System.Text.RegularExpressions;
private string GetLetter(string fileName)
{
string pattern = "\S(?=\s*?Final)";
Match match = Regex.Match(fileName, pattern);
return match.Value;
}
以下是RegEx模式的解释:
\S(?=\s*?Final)
\S // Anything other than whitespace
(?=\s*?Final) // Positive look-ahead
\s*? // Whitespace, unlimited number of repetitions, as few as possible.
Final // Exact text.