从字符串变量中提取分数的最佳方法是什么。例如,从“Match One 2-1 To Red Team”中提取2-1。
我打算在乐谱周围添加特殊字符并执行类似的操作
string in = "Match One |2-1| To Red Team";
string out = input.Split('|', '|')[1];
但这会让我在CSV文件中向数百行添加两个字符。
我能否在破折号上拆分。以某种方式将数据提取成数组?
scoreString.Split('-');
感谢任何帮助。
编辑:我写过这个并且有效,但看起来并不干净。var splitScores = values[0].ToLower().Trim().Split('-');
var leftScore = Regex.Match(splitScores[0], @"\d+").Value;
var rightScore = Regex.Match(splitScores[1], @"\d+").Value;
答案 0 :(得分:1)
您可以执行以下操作:
if(splitScores.Length != 2 || !int.TryParse(splitScores[0].Split().Last(), var leftScore) || !int.TryParse(splitScores[1].Split().First(), var rightScore)
throw new Exception("Invalid input file);
问题是你需要一些东西来识别分数。如果您使用' - '你可能会因为一个错误的位置而分开,因为' - '例如在团队名称中。为避免这种情况,您必须使用特殊标识符(就像您使用|)。
答案 1 :(得分:1)
根据您的布局,您的所有匹配结果似乎都具有如下相似的布局:
匹配[count] [int] - [int]到[Color] Team
如果是这种情况,那么一个简单的正则表达式应该能够识别并将字符串中的信息拉出到所需的格式中(在您的情况下,按顺序将数据包含两个值)。
此链接可以为您提供有关从字符串中提取匹配项的更多信息:
C# Documentation - Regex.Matches
然而,这里发生的事情存在更严重的问题。数据当前以将表示与数据混合的方式存储,这就是您正在努力处理字符串的原因。最好按如下方式实现CSV文件:
.card
可以推断出比赛号码,但这是另一回事。如果以这种方式存储数据,那么访问数据将是一件非常简单的事情。
答案 2 :(得分:0)
来自https://regexone.com/references/csharp的礼貌代码经过修改以符合您的目的。
var s = "Match One 2-1 To Red Team";
s = "Strongholds on Eden 100-95 Supremacy";
string pattern = @"(\d+)-(\d+)";
MatchCollection matches = Regex.Matches(s, pattern);
// This will print the number of matches
Console.WriteLine("{0} matches", matches.Count);
foreach (Match match in matches) {
GroupCollection data = match.Groups;
// This will print the number of captured groups in this match
Console.WriteLine("{0} groups captured in {1}", data.Count, match.Value);
Console.WriteLine("score: " + data[1] + ", score2: " + data[2]);
// Each Group in the collection also has an Index and Length member,
// which stores where in the input string that the group was found.
Console.WriteLine("score found at[{0}, {1})",
data[1].Index,
data[1].Index + data[1].Length);
}
答案 3 :(得分:-1)
var splitScores = values[0].ToLower().Trim().Split('-');
var leftScore = Regex.Match(splitScores[0], @"\d+").Value;
var rightScore = Regex.Match(splitScores[1], @"\d+").Value;
以上代码对我有用,所以我要将此标记为答案。感谢那些有帮助的人。