2012-02-13 2 views
1

문자열이 있으므로 두 번 나누고 특수 문자 뒤에 오는 부분을 선택해야합니다.C# Regex.Split 및 정규 표현

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

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

을 그래서 여기에 내가 값 + GUID 두 요소의 배열을 얻고있다 :

말할 수 있습니다.

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

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

어떤 방법 :하지만 같은 단지 GUID를 필요 한 두 줄로하고 있는거야?

+1

것은'사용한다는 것입니다 Regex.Split' (위의 컨텍스트에서) String.Split보다는 오히려 무의미합니다. 그리고 개인적으로 저는 두 가지 기능을 가지고 있습니다. 하나는 위와 같이 분할하고 다른 하나는 파이프에서 분할하는 기능입니다. – Chris

답변

5

이 작업을 수행 할 수 있지만, 당신이 한 줄에 그것을 의미하지 않는다 할 수있는 단지 때문에 (당신이 여기 너무 화려한받을 경우 가독성이 활동하기 시작)해야한다. 여기에는 전혀 검증이 없습니다.

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();