使用模式解析长字符串

时间:2014-04-27 10:19:50

标签: c# string parsing

我很感激在一项棘手的任务中提供一些帮助。

我在文本文件中收到一个长长的字符串,如下所示:

{"place":"1","points":"1783","pseudo":"player1"},
{"place":"2","points":"1675","pseudo":"player34"},
{"place":"3","points":"1671","pseudo":"player45"},

所以这是一个单一的字符串,大约有3000次相同的模式粘在一起。 (有3000名球员)

我需要解析这个字符串以填充像这样的简单结构

public struct RankedPlayer
{
    public string Pseudo;
    public int Place;
    public int Point;
}

我找不到一个简单的方法来做到这一点。我开始与RegEx斗争,但我不知道它是否是正确的方法。

2 个答案:

答案 0 :(得分:2)

好像你正在处理一个简单的JSON字符串。 使用JSON牧师james.newtonking.com - json,只需将它们作为您的对象......

以下是一个例子:

// Having this:
public struct RankedPlayer
{
   public string Pseudo;
   public int Place;
   public int Point;
}

// With this input
{"place":"1","points":"1783","pseudo":"player1"},
{"place":"2","points":"1675","pseudo":"player34"},
{"place":"3","points":"1671","pseudo":"player45"},

// You should do something like:
string input = // your input;
var list_of_players = input.Split(',');

foreach (var player in list_of_players) {
    RankedPlayer r = JsonConvert.DeserializeObject<RankedPlayer>(player);
    // Do something with it.
}

所以,只需使用您的Player结构。

修改

您可以将以下内容用于正则表达式:{.*?}匹配。基本匹配大括号之间的所有内容,以非贪婪的方式(?之后的.*)。

答案 1 :(得分:0)

您需要使用JavaScriptSerializer试试:

JavaScriptSerializer serializer = new JavaScriptSerializer();
List<RankedPlayer> myData = serializer.Deserialize<List<RankedPlayer>>(strData);