如果我有一个
的字符串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完成吗?
谢谢!
答案 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恕我直言提供更多的移动性。