使用正则表达式的单词

时间:2016-05-18 20:06:45

标签: c# regex

我想使用正则表达式来分割以下字符串

string text = "User:George;Color:Blue;Time:100;Day:Saturday;";

进入子串,所以看起来像这样:

User = George
Color = Blue
Time = 100
Day = Saturday

但是,请注意,无论文本的输入方式或字符串的顺序如何,我都希望能够使用它,因此字符串也可以是这样的。

string text = "Color:Blue;Day:Saturday;User:George;Time:100;";

2 个答案:

答案 0 :(得分:2)

以下是使用正则表达式实现所需内容的方法:

var text = "User:George;Color:Blue;Time:100;Day:Saturday;";
var dct = Regex.Matches(text, @"([^:;]+):([^;]+)")
    .Cast<Match>()
    .ToDictionary(p => p.Groups[1].Value, p => p.Groups[2].Value); 
var user = dct["User"];
var color = dct["Color"];
var time = dct["Time"];
var day = dct["Day"];
Console.WriteLine(user);
Console.WriteLine(color);
Console.WriteLine(time);
Console.WriteLine(day);

请参阅IDEONE demo,此处为regex demo

([^:;]+):([^;]+):;以外的一个或多个字符捕获到第1组中,然后匹配冒号,然后将除{{{}之外的一个或多个字符捕获到第2组中1}}。如果值是可选的,您可以将;替换为+(并且可能在括号外的末尾添加*)。

但是,评论中的其他建议(拆分)看起来要好得多,只需使用此;?初始化:

dct

主要是获取键和值,创建字典,然后您可以使用已知键访问字典值。

答案 1 :(得分:1)

尝试以下方法,它会为您的KeyValuePair返回strInput列表:

private List<KeyValuePair<string, string>> GetKeyValuePairs(string strInput)
{
    char[] strkeyValSeparator = new char[1] { ':' };
    char[] strBlockSeparator = new char[1] { ';' };
    string[] list = strInput.Split(strBlockSeparator, StringSplitOptions.RemoveEmptyEntries);

    var lstSplitted = new List<KeyValuePair<string, string>>();

    foreach (string s in list)
    {
        string[] keyValuePair = s.Split(strkeyValSeparator, 2);

        lstSplitted.Add(new KeyValuePair<string, string>(keyValuePair[0], keyValuePair[1]));
    }

    // Sorting by Key
    lstSplitted.Sort((pair1, pair2) => pair1.Key.CompareTo(pair2.Key));

    return lstSplitted;
}

调用方法:

string strInput = "User:George;Color:Blue;Time:100;Day:Saturday;";

var res = GetKeyValuePairs(strInput);

// Print on screen
foreach (var r in res)
    Console.WriteLine(r.Key + " = " + r.Value);