2016-09-29 3 views
0

텍스트 파일에서 새 줄을 제거하려고합니다. 메모장에서 텍스트 파일을 열면 내가 제거하려고하는 줄 바꿈이 표시되지 않습니다 (텍스트의 큰 벽처럼 보입니다). 그러나 파일을 열 때 굉장히 열립니다.C# Regex Replacement Not Working

enter image description here

숭고한, 나는 패턴을 제거 할 수 있습니다 '\ n \ n'을 다음 패턴 '\ n (?! AAD)'문제 없음. 그러나 다음 코드를 실행하면 결과 텍스트 파일이 변경되지 않습니다.

 public void Format(string fileloc) 
    { 
     string str = File.ReadAllText(fileloc); 
     File.WriteAllText(fileloc + "formatted", Regex.Replace(Regex.Replace(str, "\n\n", ""), "\n(?!AAD)", "")); 
    } 

무엇이 잘못 되었나요?

+0

어떤 플랫폼에서 이것을 실행하고 있습니까? 어쩌면 당신의 뉴 라인은 실제로'\ r \ n'입니까? – dlatikay

+1

정규 표현식 패턴 앞에'@'를 붙이십시오. 또는 이중 백 슬래시. – LukStorms

+0

\ n을 \ r \ n 또는 \\ n으로 바꾸고 패턴 앞에 @를 넣으면 변경되지 않습니다. 또한 이러한 패턴이 숭고하게 작동한다면 왜 C#에서 작동하지 않을까요? – RJGordon

답변

1

경험적 솔루션. 샘플 파일을 이진 모드로 열면 0x0D 문자가 포함되어 있음을 알 수 있습니다.이 문자는 캐리지 리턴 \r입니다. 그래서 난이 (쉽게 디버깅을위한 여러 줄)를 내놓았다 : 당신이 줄 바꿈의 여러 유형의 코드를 다시 조정하려고 시간을 보내고 싶어하지 않는 경우

public void Format(string fileloc) 
{ 
    var str = File.ReadAllText(fileloc); 
    var firstround = Regex.Replace(str, @"\r\r", ""); 
    var secondround = Regex.Replace(firstround, @"\r(?!AAD)", ""); 
    File.WriteAllText(fileloc + "formatted", secondround); 
} 
0

Windows/Linux 불일치 일 수 있습니까? 대신 '\ r \ n'을 대체하십시오.

+0

또는'Environment.Newline'이 둘 모두를 휴대용 방식으로 처리해야합니다. – dlatikay

2

, 여기에 일반적인 솔루션입니다 :

string str = File.ReadAllText(fileloc); 
File.WriteAllText(fileloc + "formatted", 
    Regex.Replace(Regex.Replace(str, "(?:\r?\n|\r){2}", ""), "(?:\r?\n|\r)(?!AAD)", "") 
); 

세부은 :

LINEBREAK은 (?:\r?\n|\r)과 일치 할 수있다 : 옵션 CR은 하나의 의무적 인 LF와 함께 따라 갔다. 2 연속적인 줄 바꿈을 일치 시키려면 한정 수량 지정자를 추가 할 수 있습니다 ((?:\r?\n|\r){2}).