c# - 如何拆分具有多个分隔符的字符串

标签 c# string c#-4.0 split

编辑:我应该更好地表达这个问题。我不删除它,而是将其保留在这里以供其他人学习。

我已经研究了一段时间,我还没有找到另一篇回答这个问题的帖子。

我要拆分的列表如下所示:

0. Yersinia Pestis, 76561198010013870
1. CatharsisLtd., 76561198056110126
2. Nut~Taco, 76561198072105032 

这是玩家姓名和 ID 号的列表。我正在尝试删除 x。从每一行的开头开始,, 就在 ID 号之前,这样我就得到了一个如下所示的列表:

Yersinia Pestis
76561198010013870
CatharsisLtd.
76561198056110126
Nut~Taco
76561198072105032 

我以为我已经通过使用类似这样的方法找到了解决方案:

string [] split = strings .Split(new Char [] {',' , '\n' });

但这行不通,因为玩家可以拥有诸如“, .”之类的东西。和他们名字中的其他符号。我确定有一种方法可以做类似的事情

string splitter = i.ToString()+". ";
and then something like ", any17DigitNumber"

如有任何帮助,我将不胜感激,我完全不知道如何使它适用于所有场景。唯一不变的是 ID 的索引和长度。

最佳答案

也许是这样的:

public class Player
{
    public int Index { get; set; }
    public long Id { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return string.Format("Player(Index={0}, Id={1}, Name={2})", Index, Id, Name);
    }
}

public static Player ParsePlayer(string line)
{
    var dot = line.IndexOf(".");
    var comma = line.LastIndexOf(",");
    return
        new Player
        {
            Index = int.Parse(line.Substring(0, dot).Trim()),
            Id = long.Parse(line.Substring(comma + 1).Trim()),
            Name = line.Substring(dot + 1, comma - (dot + 1)).Trim()
        };
}

public static void Main()
{
    var data = new[] {
        "0. Yersinia Pestis, 76561198010013870",
        "1. CatharsisLtd., 76561198056110126",
        "2. Nut~Taco, 76561198072105032",
        "3. Smith, John, 76561198072105033",
        " 4.Allen, Paul,76561198072105034 "
    };

    var players = new List<Player>();

    // parse
    foreach (var line in data)
    {
        players.Add(ParsePlayer(line));
    }

    // check
    foreach (var player in players)
    {
        Console.WriteLine(player);
    }
}

可测试 here .

正如 Reddy 在评论中所建议的那样,您也可以尝试使用正则表达式和命名的捕获组:

public static Player ParsePlayer(string line)
{
    var regex = new Regex(@"\s*(?<index>[0-9]+)\s*\.\s*(?<name>.+)\s*,\s*(?<id>[0-9]+)\s*");
    var match = regex.Match(line);
    return
        new Player
        {
            Index = int.Parse(match.Groups["index"].Value),
            Id = long.Parse(match.Groups["id"].Value),
            Name = match.Groups["name"].Value
        };
}

可测试 here .

'希望这有帮助。

关于c# - 如何拆分具有多个分隔符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066596/

相关文章:

c# - ArgumentException 和 just Exception 有什么区别?

c# - 如何检测何时按下向下箭头键/C# WPF

Java 字符串长度函数显示不正确的值

c#-4.0 - 如何扩展 MEF 以根据作为属性提供的工厂类型创建对象?

c# - 存储客户端库 2.0 - 为什么 API 使用起来不如 1.7 那么直观?

c# - 哪个 Eyeshot 实体效率更高?

c++ - 我究竟做错了什么? (C++ 字符串)

string - 如何在for循环中对变量执行字符串操作?

.net - 带有加扰的非 ASCII 字符的 JSONP 字符串

c# - 我们如何在 C# 中获取异步方法名称