Having one column with many values is a very bad design.
That is why you asking your question.
My best advice is to learn how to normalize your database as your current design will give you lots of headaches in the future.
Database normalization[
^]
3 Normal Forms Database Tutorial[
^]
Database Normalization Basics[
^]
If this approach is the only way, then a regular expression can be used to extract the values.
Regex regex = new Regex(@"lvl(?<level>[0-9]+)\=(?<value>[0-9]+)(\\rank=(?<rank>[0-9]+))?");
foreach (Match m in regex.Matches(@"lvl1=100;lvl2=100\rank=2\..."))
{
int level = int.Parse(m.Groups["level"].Value);
int value = int.Parse(m.Groups["value"].Value);
int rank = int.Parse((m.Groups["rank"].Value == "") ? "0" : m.Groups["rank"].Value);
}
Without more info about the logic it is the best I can do.