2014-08-28 4 views
0

C#에서 일부 복잡한 문자열에 대한 정규식 도움말이 필요합니다.다양한 구분 기호로 문자열을 분할하는 정규식

내가 가진 문자열 :

 
-- [AUG-24-14 11:58 PM (EDT) Mickey Rahman] --------------Comment 1-- [AUG-24-14 11:40 PM (EDT) Mickey Rahman] --------------Comment 2-- [AUG-22-14 11:51 PM (EDT) Automation User] --------------TEST 3 

내가 원하는 분할은 이것이다 :

MATCH 1 :

-- [AUG-24-14 11:58 PM (EDT) Mickey Rahman] --------------Comment 1

MATCH 2 :

-- [AUG-24-14 11:40 PM (EDT) Mickey Rahman] --------------Comment 2

MATCH 3 :

-- [AUG-22-14 11:51 PM (EDT) Automation User] --------------TEST 3

문자열을 대시 (-)와 일치시키는 패턴을 기반으로 Regex.Split()을 시도했지만 문제는 이것을 분할의 일부로도 사용하려는 것입니다. 나는 그것이와 함께 캐릭터와 실제 코멘트 나에게 별도의 일치를주는 괜찮아요 - 문자열, 그러나이와 나는 점점 중복 해요 :이

string input = "-- [AUG-24-14 11:58 PM (EDT) Mickey Rahman] --------------Comment 1-- [AUG-24-14 11:40 PM (EDT) Mickey Rahman] --------------Comment 2-- [AUG-22-14 11:51 PM (EDT) Automation User] --------------TEST 3"; 
string pattern = "((?<=--)(.*)(?=--------------))"; 

string[] substrings = Regex.Split(input, pattern); // Split on hyphens 
int i = 1; 
foreach (string match in substrings) 
{ 
    Response.Write("MATCH " + i.ToString() + ":" + string.Format("{0}", match) + "<br>"); 
    i++; 
} 

, 난 출력을 지고는 다음과 같습니다

당신이 분할 방법을 사용하여 만족하는 경우
 
    MATCH 1:-- 
    MATCH 2: [AUG-24-14 11:58 PM (EDT) Mickey Rahman] 
    MATCH 3: [AUG-24-14 11:58 PM (EDT) Mickey Rahman] 
    MATCH 4:-------------- Comment 1 -- 
    MATCH 5: [AUG-24-14 11:40 PM (EDT) Mickey Rahman] 
    MATCH 6: [AUG-24-14 11:40 PM (EDT) Mickey Rahman] 
    MATCH 7:-------------- Comment 2 -- 
    MATCH 8: [AUG-22-14 11:51 PM (EDT) Automation User] 
    MATCH 9: [AUG-22-14 11:51 PM (EDT) Automation User] 
    MATCH 10:-------------- TEST 3 
+0

split 메서드를 사용할 때 너무 복잡하면'\ G' 앵커로 "Matches"메서드를 사용하십시오. –

답변

1

다음 시도하십시오 :

string input = "-- [AUG-24-14 11:58 PM (EDT) Mickey Rahman] --------------Comment 1-- [AUG-24-14 11:40 PM (EDT) Mickey Rahman] --------------Comment 2-- [AUG-22-14 11:51 PM (EDT) Automation User] --------------TEST 3"; 
string pattern = @"(?=-- \[.+\])"; 

string[] substrings = Regex.Split(input, pattern).Where(_=>_.Length > 0).ToArray(); // Split on hyphens 
int i = 1; 
foreach (string match in substrings) 
{ 
    Console.WriteLine("MATCH " + i.ToString() + ":" + string.Format("{0}", match)); 
    i++; 
} 

OUTPUT을

MATCH 1:-- [AUG-24-14 11:58 PM (EDT) Mickey Rahman] --------------Comment 1 
MATCH 2:-- [AUG-24-14 11:40 PM (EDT) Mickey Rahman] --------------Comment 2 
MATCH 3:-- [AUG-22-14 11:51 PM (EDT) Automation User] --------------TEST 3 
1

는, 이것이 내가 생각 해낸 솔루션입니다.

String input = @"-- [AUG-24-14 11:58 PM (EDT) Mickey Rahman] --------------Comm--ent 1-- [AUG-24-14 11:40 PM (EDT) Mickey Rahman] --------------Comment 2-- [AUG-22-14 11:51 PM (EDT) Automation User] --------------TEST 3"; 
string[] parts = Regex.Split(input, @"(?<!\A)(?=-- *\[)"); 

int i = 1; 
foreach (string m in parts) { 
     Console.WriteLine("MATCH " + i + ":" + m); ++i; 
} 

출력

MATCH 1:-- [AUG-24-14 11:58 PM (EDT) Mickey Rahman] --------------Comm--ent 1 
MATCH 2:-- [AUG-24-14 11:40 PM (EDT) Mickey Rahman] --------------Comment 2 
MATCH 3:-- [AUG-22-14 11:51 PM (EDT) Automation User] --------------TEST 3 

Working Demo

+0

대부분의 경우 작동합니다 - 주석 안에 '-'가있는 경우 어떻게됩니까? 'comm - ent'는 내가 '- ['로 나눌 수있는 방법입니까? –

관련 문제