2012-02-13 12 views
1

文字列を持っているので、2回に分割して特殊文字に続く部分を選択する必要があります。C#Regex.Splitと正規表現

string myString = "Word 2010|82e146e7-bc85-4bd4-a691-23d55c686f4b;#Videos|55140947-00d0-4d75-9b5c-00d8d5ab8436"; 

string[] guids = Regex.Split(myString,";#"); 

をだからここに私はバリュー+ GUIDを持つ2つの要素の配列を取得しています:

は言うことができます。

[0] 82e146e7-bc85-4bd4-a691-23d55c686f4b

[1] 55140947-00d0-4d75-9b5c-00d8d5ab8436

任意の方法:しかし、私は次のように、唯一のGUIDを必要とします1/2行でやっているの?

+1

ことの一つは、 '使用していることです'String.Split'ではなく、Regex.Split'(上の文脈で)は意味がありません(そして、私はより多くのオーバーヘッドを持っていると思われます)。個人的には、私は上記のように分割し、パイプ上で分割する2つの機能を持っています。 – Chris

答えて

5

あなたはこれを行うことができますが、 1行でそれが意味するものではありません行うことができという理由だけで、あなた(ここであまりにも空想取得する場合可読性が場に出る)する必要があります。明らかにここで検証は全くありません。

string myString = "Word 2010|82e146e7-bc85-4bd4-a691-23d55c686f4b;#Videos|55140947-00d0-4d75-9b5c-00d8d5ab8436"; 

string[] guids = Regex.Split(myString, ";#") 
         .SelectMany(s => Regex.Split(s, @"\|").Skip(1)) 
         .ToArray(); 

Assert.AreEqual(2, guids.Length); 
Assert.AreEqual("82e146e7-bc85-4bd4-a691-23d55c686f4b", guids[0]); 
Assert.AreEqual("55140947-00d0-4d75-9b5c-00d8d5ab8436", guids[1]); 
3

それぞれの最後の部分は常にGUIDです場合は、簡単に正規表現せずにこれを行うことができます:ここで言及する価値

string[] guids = String.Split(";").Select(c => c.Substring(c.Length - 36)).ToArray(); 
0
string[] guids = myString.Split(';').Select(x => x.Split('|')[1]).ToArray(); 
0
string myString = "Word 2010|82e146e7-bc85-4bd4-a691-23d55c686f4b;#Videos|55140947-00d0-4d75-9b5c-00d8d5ab8436"; 

//split the string by ";#" 
string[] results = myString.Split(new string[] { ";#" }, StringSplitOptions.RemoveEmptyEntries); 

//remove the "value|" part 
results[0] = results[0].Substring(results[0].IndexOf('|') + 1); 
results[1] = results[1].Substring(results[1].IndexOf('|') + 1); 

//Same as above, but in a for loop. usefull if there are more then 2 guids to find 
//for(int i = 0; i < results.Length; i++) 
// results[i] = results[i].Substring(results[i].IndexOf('|') + 1); 

foreach(string result in results) 
    Console.WriteLine(result); 
0
var guids = Regex 
    .Matches(myString, @"HEX{8}-HEX{4}-HEX{4}-HEX{4}-HEX{12}".Replace("HEX", "[A-Fa-f0-9]")) 
    .Cast<Match>() 
    .Select(m => m.Value) 
    .ToArray();