2010-01-05 2 views
0

문자열 값이 있으며 엔지니어 이름 만 가져 오려고합니다. 이 경우에는 "CARL HARRISON"입니다.문자열 값을 나누기 C#

"{ Engineer = CARL HARRISON, HandHeldAvailability = H, HASHHT = True, HHTSTATUS = }" 

이름은 다른 lenths 일 수 있지만 항상 같은 형식입니다.

답변

6
string regex = @"{ Engineer = (?<Name>.*), HandHeldAvailability"; 

string input = "{ Engineer = CARL HARRISON, HandHeldAvailability = H, HASHHT = True, HHTSTATUS = }"; 
string engineerName = ""; 

Match match = Regex.Match(input, regex); 
if(match.Success && match.Groups["Name"] != null) 
{ 
    engineerName = match.Groups["Name"].Value; 
} 

정규식은 입력 문자열 일치 (그렇지 않으면 match.Success이 거짓이 될 것이다)와 쉽게 경우 입력 형식 변경을 변경 할 수 있는지 확인 할 수 있습니다. 다른 부분도 쉽게 일치시킬 수 있습니다.

편집 : 당신이 (즉, 루프에서)이 함수를 많이 호출 할 경우, 당신은 또한 정규식을 컴파일 할 수 :

public class YourDataClass { 
    private static Regex regex = new Regex(@"{ Engineer = (?<Name>.*), HandHeldAvailability", RegexOptions.Compiled); 

    public string GetNameFromInput(string input) { 
     var result = string.Empty; 
     Match match = regex.Match(input); 
     if(match.Success && match.Groups["Name"] != null) 
     { 
      result = match.Groups["Name"].Value; 
     } 
     return result; 
    } 
} 
+0

멋지게 완료되었습니다. 정규 표현식은이 물건에 아주 좋습니다. – AboutDev

+0

I (over?) 가장 간단한 문자열 매칭/조작 작업을 위해 Regex를 사용합니다. 일단 배웠 으면 중독성이 생깁니다 :-) –

6
string name = s.Split(',')[0].Split('=')[1].Trim(); 

설명 : , 의해 Split주는이 처음 촬영 소자

{ Engineer = CARL HARRISON 
_HandHeldAvailability = H 
_HASHHT = True 
_HHTSTATUS = } 

= 의해

{ Engineer = CARL HARRISON 

Split 준다 준다 :

{ Engineer_ 
_CARL HARRISON 
,617 내가 선도하고 명확하게하기 위해 _에 의해 후행 공백을 대체했다

CARL HARRISON 

이의 두 번째 요소를 복용

_CARL HARRISON 

Trim가 제공되도록 제공합니다.

+0

@Downvoter : 설명해주십시오. – jason

+0

나는 downvoted 사람이 아니었지만 문제는 사람이 "나쁜"문자열 (IndexOutOfRangeException을 던져야 함)을 전달할 경우 쉽게 깨지는 것을 볼 수 있다고 생각합니다. 하지만 일반적으로 명확하고 간결합니다. –

+1

유효성 검사가 문제의 일부인 경우이 방법이 최선의 방법이 아닙니다. 그는 내가 문자열이라고 생각한 문자열에서 이름을 추출하는 방법을 물었습니다. 문자열이 올바르게 형식화되었다는 것을 이미 알고 있다는 의미였습니다. 댓글 주셔서 감사합니다. – jason