C#で以下の文字列から部分文字列「John Woo」を抽出するにはどうすればよいですか
CN=ジョン・ウー、OU=IT、OU=HO、DC=ABC、DC=com
ありがとう !
を使用できますLookup<TKey, TElement>
:
string text = "CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com";
var keyValues = text.Split(',')
.Select(s => s.Split('='))
.ToLookup(kv => kv[0], kv => kv.Last());
string cn = keyValues["CN"].FirstOrDefault(); // John Woo
// or, if multiple values with the same key are allowed (as suggested in the given string)
string dc = string.Join(",", keyValues["DC"]); // ABC,com
キーが存在しない場合 (ディクショナリのように) も、キーが一意でない場合も (ディクショナリのように)、例外は発生しないことに注意してください。値はIEnumerable<TElement>
です。
これを試して
var regex = new Regex("CN=(?<mygroup>.*?),");
var match = regex.Match("CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com");
if(match.Success)
{
string result = match.Groups["mygroup"].Value;
}
このようなもの
var s = "CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com";
// this give you a enumarable of anonymous key/value
var v = s.Split(',')
.Select(x => x.Split('='))
.Select(x => new
{
key = x[0],
value = x[1],
});
var name = v.First().value; // John Woo
これを試してください(これは一般的な答えではありません):
var name = str.Split(',').Where(n => n.StartsWith("CN=")).FirstOrDefault().Substring(3);
最初に文字列をコンマで分割して、文字列の配列を取得できます。それぞれの文字列は、次のように区切られた名前/値のペア=
です。
string input = "CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com";
var nameValuePairs = input.Split(new[] {','});
次に、最初の名前/値のペアを次のように分割できます。
var nameValuePair = nameValuePairs[0].Split(new[]{'='});
最後に、値の部分は次のようになりますnameValuePair[1]
。
var value = nameValuePair[1];
(上記のエラー処理はありません。もちろん、いくつか追加する必要があります。)