如何从格式化字符串中提取值?

时间:2009-06-23 05:34:51

标签: c# parsing input

我有一个字符串数组,值如下

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

从此我想提取ID值.. 1,2 ..

现在我这样做:

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

还有其他好办法吗?

由于

4 个答案:

答案 0 :(得分:5)

您可以使用正则表达式查找ID(匹配()部分可能不是100%正确 - 向读者留下练习。)

var regex = new Regex(@"\[ID = (?<id>[0-9]+)\]");
var ids = sNames.Select(s => Convert.ToInt32(regex.Match(s).Groups["id"].Value));

答案 1 :(得分:2)

你可以使用正则表达式...

// 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());
  // ...
}

但是now you have two problems。 ; - )

答案 2 :(得分:2)

听起来像正则表达式的工作。这将匹配所有字符串,格式为“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]);
  }
}

答案 3 :(得分:1)

正则表达式是“最简单的”。当然,需要注意的是正则表达式有很大的学习曲线。

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