2012-09-07 2 views
0

다음 형식의 다중 라인 입력 문자열이 있습니다RegEx, 파이프로 연결된 (|) 패턴 문자열

ID | Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 | Col8

데이터가 수천 개의 행으로 실행될 수 있습니다. Col1-8의 데이터 형식은 행과 다를 수있는 영숫자 또는 알파 만 가능합니다.

  1. 이 Col2의 & 열 3 밖으로 추출

  2. 내가 원하는 :

    나는 다음을 수행해야합니다 (내 경우에는 느린 것 이후부터 정규식 여기 대신 일반적인 문자열 분할을 사용하여 생각을?) 나머지 데이터도 다음 형식으로 표시됩니다. ID | Col1 | Col4 | Col5 | Col6 | Col7 | Col8

내가 점 2에 대한 솔루션 따라서 첫째을 달성하면서 Col2의 & 열 3의 데이터를 잃어 버릴하지 않으 있습니다 (I 지점 1의 데이터를 일단 내가하려면 string.replace을 사용하여 달성 할 수있는이) 요점은 나에게도 중요하다.

내가 지금 완전히 이해하고 (curently) Regex를 사용하여 진행하는 방법을 모른다는 것을 알고있는 (|) {2,4}로 포인트 1에 대한 정규 표현식 만들기를 시도했다.

나는 어떤 도움을 주셔서 감사합니다/포인터에 대한 정규식을 만드는 방법에 대한 포인터.

+7

무엇을 했습니까? – MMK

+7

"나중에 내 경우가 더 느릴 것이기 때문에"- 그냥 추측입니까? 그것은 소리가 나는 것처럼 들리지만 그 증거가 있습니까? 가장 간단한 방법으로 시도해 보았습니까? 너무 느린 것으로 나타 났습니까? –

+0

제발, regexps에 대해 잊어 버리십시오, 그것은 단지 주류입니다. 그냥'splitByString (string, delim)'을 사용하십시오. – gaussblurinc

답변

0

이렇게 할 수없는 이유가 있습니까?

var str = "ID | Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 | Col8"; 
var strA = str.Split(" | ".ToArray(), StringSplitOptions.RemoveEmptyEntries).ToList(); 
var strExtract = new List<string> { strA[2], strA[4] }; 
strA.RemoveAt(2); 
strA.RemoveAt(3); 
Console.WriteLine(string.Join(" | ", strA.ToArray())); 
+0

이 해결 방법은 항목 2와 항목 3 (1 번 항목)을 가져 오지 않고 제거하기 만하면됩니다. –

+0

@ CuongLe, 맞습니다. 내 대답을 편집했습니다. –

0

.Split '|', 5)를 사용하여 처음 4 개의 요소와 나머지 스팅을 배열로 가져옵니다.

1
var cols = input.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries) 
      .Select(s => s.Trim()) 
      .ToList(); 

var extractedcols = cols.Skip(2).Take(2); 
var output = string.Join(" | ", cols.Except(extractedcols));