簡體   English   中英

使用正則表達式的單詞

[英]Split words using 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;";

以下是使用正則表達式實現所需內容的方法:

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演示 ,這是正則表達式演示

([^:;]+):([^;]+)在組1中捕獲除以下之外的一個或多個字符:; ,然后匹配一個冒號,然后捕獲到第2組以外的一個或多個字符; 如果值是可選的,你可以更換+* (也許,添加;?在括號外的結束)。

但是,注釋中的其他建議(拆分)看起來要好得多,只需使用此dct初始化:

var dct = text.Trim(';').Split(';').Select(t=>t.Split(':')).ToDictionary(t=>t[0], t=>t[1]); 

重點是獲取鍵和值,創建字典,然后您可以使用已知鍵訪問字典值。

嘗試以下方法,它返回strInputKeyValuePair列表:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM