2015-01-23 5 views
0

내가이 문자열을 무시합니다. 먼저 나는 이스케이프 된 플러스 "? +"를 제외하고 +에 나누고 싶습니다. 둘째로 이스케이프 된 콜론 "? :"을 제외하고 결과를 나눕니다.Regex.Split는 empy 결과

string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![\?])[\+]+"); 

결과 :

[0] IMD 
[1] F 
[2] :::PS4 SAINTS R IV R?+GA' 

결과가 잘못 다음 정규식

나는 성공적으로 내 문자열을 분할 할 수 있습니다. 어레이에 4 개의 입력이 있어야합니다. 빈 레스 풀을 제거합니다. 배열에 머무르기 위해서는 빈 결과가 필요합니다. 결과는 다음과 같아야합니다.

[0] IMD 
[1] F 
[2] 
[3] :::PS4 SAINTS R IV R?+GA' 

왜 이런 식으로 행동하는지 아시나요? 어떤 제안?

+0

한 번에 한 가지 문제에 집중해야합니다. 콜론으로 분할하고 싶다면 별도의 질문으로 제안하는 것이 좋습니다. 예상 결과에 콜론이 포함되어 있다고 가정하면 아마도 아직 시도하지 않고있는 것입니다. –

+0

예, 한 번에 하나의 분할을 수행합니다. 주된 문제는 empy 항목을 유지하는 것이 었습니다. 그러나 이제 해결되었습니다. – jjtilly

답변

3

당신은 명시 적으로 "적어도 하나 플러스"에 분할 할 말을하는지. 그렇기 때문에 ++을 하나의 구분 기호로 취급합니다. 그냥 하나의에 분할 플러스 - 당신은 문자의 집합으로 그것을 넣을 필요가 없습니다 참고 :을 경우, 돈 문자 집합에 넣어하려는

string[] data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<!\?)\+"); 

그것을 벗어날 필요가 없습니다. 위에서 벗어나는 유일한 이유는 "이것은 그룹 한정 기호가 아니라 그냥 더하기 문자입니다"라고 말하는 것입니다. 그래서 이것은 똑같이 좋습니다 :

+0

감사합니다! 이 예제들은 내가 원하는만큼 정확하게 작동했습니다. – jjtilly

2

문자 클래스 다음에 + 만 제거하면됩니다. +은 이전 토큰과 1 회 이상 매치합니다. 따라서이 [\+]+ 정규 표현식은 단일 플러스뿐만 아니라 다음 플러스와도 일치합니다. 그 무엇 [\+]+ 수단입니다 -

string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]") 
+0

그리고 문자 클래스는'[: +]'로 변경되어야합니다; 그는 콜론으로 나누기를 원합니다. –

+0

@TimPietzcker하지만 그의 예상 결과는 다릅니다. –

+0

흠, 당신 말이 맞아요. 아마도 그는 첫 번째 분할 이후에 그가 기대하는 것에 대해 이야기하고있을 것입니다. @jjtilly는 분명히해야합니다. –