从字符串中获取特定值

时间:2015-08-31 21:20:19

标签: c#

如果我有一个

的字符串
string Text="@Time:08:30PM,@Date:08/30/2015,@Duration:4,"

如何提取以“@”开头并以“,”结尾的每一个。我搜索过,我看到人们得到一对子串,但不是我需要它。我想说:

string Time = "08:30PM" //However i can extract it from that string
string Date = "08/30/2015" //etc...

可以用Regex完成吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

如何使用Regex并将键值对转换为字典

string input = "@Time:08:30PM,@Date:08/30/2015,@Duration:4,";
var dict = Regex.Matches(input, @"@(\w+):(.+?),")
           .Cast<Match>()
           .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value);

Console.WriteLine(dict["Time"]);

答案 1 :(得分:0)

尝试使用String.Split()创建数组,然后在数组的每个元素上使用子字符串。

示例:

string example = "@Time:08:30PM,@Date:08/30/2015,@Duration:4,";
string[] splitText = example.Split('@');

在此之后,splitText将包含以下元素:

{"", "Time:08:30PM,", "Date:08/30/2015,", "Duration:4," }

答案 2 :(得分:0)

这是第一次拍摄。适用于您的示例,当然,您可能需要根据需要处理边缘情况。

 static void Main(string[] args)
 {
     var text = "@Time:08:30PM,@Date:08/30/2015,@Duration:4,";

     var Time = GetValueForItem("Time", text);
     var Date = GetValueForItem("Date", text);
     var Duration = GetValueForItem("Duration", text);
 }      

 static string GetValueForItem(string item, string text)
 {
     item = $"@{item}:"; //if pre C#6 use string.Format("@{0}:", item)
     var index = text.IndexOf(item);

     var chars = text.Substring(index + item.Length).TakeWhile(c => c != ',');
     return string.Concat(chars);
 }

获取所需文本的索引,使用该索引获取所有字符,直到到达分隔符。比Regex恕我直言提供更多的移动性。