フォーマットされた文字列の内部から値を抽出するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1030765

  •  06-07-2019
  •  | 
  •  

質問

文字列配列を取得しました。値は次のとおりです

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

他の良い方法はありますか?

ありがとう

役に立ちましたか?

解決

正規表現を使用してIDを見つけることができます(Match()部分は100%正しくない場合があります。読者に任せてください)。

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

他のヒント

正規表現を使用できます...

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

しかし、 2つの問題があります。 ;-)

正規表現の仕事のように聞こえます。これは、&quot; ID = [some number]&quot;

のパターンを持つすべての文字列に一致します
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]);
  }
}

正規表現は「最も簡単」です。もちろん、正規表現には大きな学習曲線が存在するという警告があります。

Regex rx = new Regex(@"\[ID\s*=\s*(?<id>\d+)\]");
Match m = rx.Match(str);
string id = m.Groups["id"].Value;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top