Как извлечь значение из отформатированной строки? - PullRequest
1 голос
/ 23 июня 2009

Я получил строковый массив, значения которого следующие:

sNames[0] = "Root | [<root>] | [ID = 1]";
sNames[1] = "Planning | [Root] | [ID = 2]";

Из этого я хотел бы просто извлечь значение идентификатора.

сейчас я делаю это как:

foreach (var s in sNames)
{
  int id = Convert.ToInt32(s.Split('|')[2].Split('=')[1].Substring(1,1));
  ...
}

Есть ли другой хороший способ сделать это?

Спасибо

Ответы [ 4 ]

5 голосов
/ 23 июня 2009

Вы можете использовать регулярное выражение, чтобы найти идентификатор (часть Match () может быть не на 100% правильной - упражнение оставлено читателю).

var regex = new Regex(@"\[ID = (?<id>[0-9]+)\]");
var ids = sNames.Select(s => Convert.ToInt32(regex.Match(s).Groups["id"].Value));
2 голосов
/ 23 июня 2009

Звучит как работа для регулярных выражений. Это будет соответствовать всем строкам с шаблоном "ID = [some number]"

using System.Text.RegularExpressions;
...

foreach(string s in sNames) {
  Match m = Regex.Match("ID = ([0-9]+)");
  if(m.Success) {
    int id = Convert.ToInt32(m.Groups[1]);
  }
}
2 голосов
/ 23 июня 2009

Вы можете использовать регулярные выражения ...

// using System.Text.RegularExpressions
Regex rx = new Regex(@"\[ID\s*=\s*(\d+)\]", RegexOptions.IgnoreCase);
foreach (var s in sNames)
{
  Match m = rx.Match(s);
  if (!m.Success) continue; // Couldn't find ID.
  int id = Convert.ToInt32(m.Groups[1].ToString());
  // ...
}

Но теперь у вас две проблемы . ; -)

1 голос
/ 23 июня 2009

Регулярные выражения - самые «простые». С оговоркой, конечно, что есть огромная кривая обучения для регулярного выражения

Regex rx = new Regex(@"\[ID\s*=\s*(?<id>\d+)\]");
Match m = rx.Match(str);
string id = m.Groups["id"].Value;
...