2011-10-28 2 views
2

몇 주 전에 특정 하위 문자열을 기반으로 문자열을 분할하는 방법에 대해 비슷한 질문을 던졌습니다. 그러나 이제는 조금 다른 것을하고 싶습니다. 다음과 같은 줄이 있습니다. (서식에 대해 미안합니다) :정규식에서 문자열의 일부를 제외 할 때

내가 원하는 것은 모든 줄 바꿈 시퀀스에서이 줄을 나눕니다. 그러나 PA41 라인 중 하나 뒤에 PA42가있는 경우이 작업을 수행하고 싶지 않습니다. PA41과 그 뒤에 오는 PA42 라인이 같은 라인에 있도록하고 싶습니다. 나는 아무 소용이없는 몇 가지 정규 표현식을 사용하여 시도했다. 내가 찾고있는 출력은 이상적으로 다음과 같이 보일 것입니다 :

이것은 현재 사용하고있는 정규 표현식이지만, 찾고자하는 것을 성취하지 못합니다.

string[] p = Regex.Split(parameterList[selectedIndex], @"[\r\n]+(?=PA41)"); 

설명이 필요하면 언제든지 문의하십시오.

답변

3

, 당신은 부정적인 일을합니다. (긍정적 부정적이, 실행 을 보장하는 반면되지., 패턴 다음과 않는 것을 보장)

(\\r\\n)(?!PA42) 

작품 for me.

+0

감사합니다. 어떤 이유로이 표현식을 사용할 때 @ "(\ r \ n) (?! PA42)"을 사용하지 않으면 실제로 분할되지 않습니다. 그러나 PA # 라인 끝 부분에 \ r \ n을 남기지 않고 별도의 라인으로 분할하고 있습니다. – almostProgramming

+0

@almostProgramming : "\ r \ n"문자 그대로 "\"다음에 "n"또는 "r"입니까? 또는 캐리지 리턴 및 라인 피드입니까? 그 패턴의 모든 차이를 만들 것입니다,하지만 당신이 그 질문에 대한 요새를 보여 주면, 또는 그들이 문자인지 나는 모르겠다. –

+0

그들은 실제로 캐리지 리턴과 새로운 라인입니다. 미안해, 내가 그 질문에 분명하게 말 했어야 했어. – almostProgramming

3
string[] splitArray = Regex.Split(subjectString, @"\\r\\n(?!PA42)"); 

이렇게하면됩니다. 그것은 부정적인 lookahead 어설 션을 사용하여 \ r \ n 시퀀스 다음에 PA42가 나오지 않도록합니다.

설명 : 당신은 긍정적 인 예견을 시도하고

@" 
\\   # Match the character “\” literally 
r   # Match the character “r” literally 
\\   # Match the character “\” literally 
n   # Match the character “n” literally 
(?!  # Assert that it is impossible to match the regex below starting at this position (negative lookahead) 
    PA42  # Match the characters “PA42” literally 
) 
" 
+0

빠른 답변 감사합니다. – almostProgramming

+0

@almostProgramming 아무런 문제가 없습니다. 이해할 수는 없지만 왜 받아들이지 않았습니까? – FailedDev

+0

여러 답변을 받아 들일 수 있다면 그렇게 할 수 있습니다. :) – almostProgramming

관련 문제