[英]How to split a text by words instead of .?! marks using Regex Split?
[英]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);
([^:;]+):([^;]+)
在组1中捕获除以下之外的一个或多个字符:
和;
,然后匹配一个冒号,然后捕获到第2组以外的一个或多个字符;
。 如果值是可选的,你可以更换+
与*
(也许,添加;?
在括号外的结束)。
但是,注释中的其他建议(拆分)看起来要好得多,只需使用此dct
初始化:
var dct = text.Trim(';').Split(';').Select(t=>t.Split(':')).ToDictionary(t=>t[0], t=>t[1]);
重点是获取键和值,创建字典,然后您可以使用已知键访问字典值。
尝试以下方法,它返回strInput
的KeyValuePair
列表:
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.