2014-10-23 2 views
2

선택 모든

나는이 같은 문자열이 서하십시오 : 나는에 대한 제외하고는 ID의 모든, 을 선택하기 만하면 무엇 var curStr = "39bta,1q7l,vlaya,zkfaa,bc[ke],cc[b7ic,h7ko,c4ic]";
바로 뒤에있는 것들 내가 다음에이 문제를 시도 [ (그래서하지 bc 또는 cc)

A :

내가 정확히 원하는대로 작동하며 에 넣고 CSL에 넣습니다. 그러나 마지막 항목 (c4ic - 아마도 .Last() 부분 때문 임)은 무시합니다. 이 일을하는 데 더 깔끔하고 우아한 방법이 있습니까? 이 같은

+0

"직접 * 뒤의''[*이"... 당신을했다 '('?) 앞에 직접적으로 의미가 있습니까? –

+0

이전 - 그래서'bc'는'['앞에 있고, 선택되지 않을 것입니다. – TheGeekZn

+0

'c41c' 대신'c4ic'을 무시한다는 것을 의미합니까? – juharr

답변

3

한 줄의 교회 :

var x = curStr 
     .Split(',') 
     .Select(y => y.Contains('[') ? y.Split('[').Skip(1).First() : y) 
     .Select(z => z.Replace("]",string.Empty)); 
+0

똑똑합니다. 내 정규식 버전보다 낫다. – Jonesopolis

+0

부품에 둘 이상의'['' –

+1

@ Selman22가 포함되어 있으면이 작업이 실패합니다.이 작업을 실패하게 만드는 많은 입력이 있다고 생각할 수 있습니다. 주어진 요구 사항 만 쓸 수 있습니다. – Hogan

0

뭔가 작동합니다 :

// If you don't need ] let's remove it first and split on comma 
var parts = curStr.Replace("]","").Split(','); 

// get the parts that contains [, 
// split them and get only those parts that comes after [ 
// by checking the index 
var p2 = parts 
     .Where(x => x.Contains("[")) 
     .SelectMany(x => x.Split('[').Where((a, idx) => idx % 2 != 0)); 

// concat them into one list 
var result = parts.Where(x => !x.Contains('[')).Concat(p2).ToList(); 

bc[[ 같은 경우를 처리하지 않습니다, 당신은뿐만 아니라 이러한 경우를 처리하기 위해 x.Split(new [] { '[' }, StringSplitOptions.RemoveEmptyEntries)를 사용할 수 있습니다.

Fiddle

+0

두 가지 - 컴파일 문제를 일으키는 내부 람다에서 x를 재정의합니다 (여기서는 코드를 수정하지 않고 코드는 수정하지 않았습니다). 또한 이것이 중요 할지도 모르는 주문을 보존하지 않는다는 점에 유의할 필요가 있습니다 (원래 견본은하지만 요구 사항으로 명시되지 않았습니다). – Chris

0

가장 큰 문제는 밖으로 내부 항목을 당기고 있습니다. 쉼표로 자르면 cc[b7ic과 같은 항목을 갖게됩니다.

var items = curStr 
      .Split(',') 
      .Select(item => Regex.Replace(item, @"[^\[]*\[(.*)", "$1").Replace("]", "")); 

var result = string.Join(",",items); 
0

당신이 정규 표현식을 사용할 수 있습니다 : 그럼 그냥 앞 부분 없애 정규식을 사용할 수 있습니다

string pattern = @"\,([a-z]*)\["; 
string replacement = ","; 
Regex rgx = new Regex(pattern); 
string result = rgx.Replace(curStr, replacement); 
result = result.Replace("]",""); 
string[] array_result = result.Split(',');