2011-09-08 11 views

답변

8

희망 :

string inputString = "\ncheese\a"; 
char[] escapeChars = new[]{ '\n', '\a', '\r' }; // etc 

string cleanedString = new string(inputString.Where(c => !escapeChars.Contains(c)).ToArray()); 
3

참조하는 이스케이프 시퀀스는 일반적으로 인쇄 할 수없는 문자 (새 줄 또는 탭)이거나 소스 코드 파일 (예 : 백 슬래시 "\")에 사용되는 다른 문자와 충돌하는 문자 기반의 문자입니다.).

디버거에서 디버거에서 이스케이프 된 문자로 표시된 이러한 문자가 표시 될 수 있지만 스트림의 실제 문자는 "이스케이프 처리"되지 않으며 실제 문자 (예 : 줄 바꿈 문자)입니다.

당신은 (예 : 개행 문자) 특정 문자를 제거 당신은 당신이 실제로 일부를 (예를 들어, 문자 "A")

// Removes all newline characters in a string 
myString.Replace("\n", ""); 

다른 문자 일을 할 경우 같은 방식으로 제거하려면 (예 : 소스 코드 파일) 이스케이프 문자가 포함 된 문자열에 대한 처리는 당신은 단순히 이스케이프 동등한와 이스케이프 문자열을 대체 할 수

// Replaces the string "\n" with the newline character 
myString.Replace("\\n", "\n"); 

을 내가 백 슬래시의 이스케이프 시퀀스를 사용하여 위의 해당 그래서 t 대신에 "\ n"이라는 문자열을 찾습니다. 그는 개행 문자입니다. 울부 짖는 소리 구문은 당신이

string inputString = @"hello world]\ "; 

StringBuilder sb = new StringBuilder(); 
string[] parts = inputString.Split(new char[] { ' ', '\n', '\t', '\r', '\f', '\v','\\' }, StringSplitOptions.RemoveEmptyEntries); 
int size = parts.Length; 
for (int i = 0; i < size; i++) 
    sb.AppendFormat("{0} ", parts[i]); 
+1

Okay Thanx, 저는이 시퀀스가 ​​너무 특별해서 명령이 하나의 작업에서 모든 것을 찾을 수 있기 때문에 생각했습니다. – mono

0

것은 당신이 적은 코드에 대한려고하는 경우에 대한 전체 도움이 될 것입니다

-2

탈출 sequense는 일반적으로 시작하는 문자의 문자열입니다 ESC-char이지만 임의의 문자를 포함 할 수 있습니다. 그들은 커서 위치 그래픽 모드 등을 제어하기 위해 터미널에서 사용됩니다. http://en.wikipedia.org/wiki/Escape_sequence 여기에 파이썬을 구현했습니다. 제어 문자를 감지하는 C.

#!/usr/bin/python2.6/python 
import sys 

Estart="\033" #possible escape start keys 
Estop="HfABCDsuJKmhlp" #possible esc end keys 
replace="\015" # ^M character 
replace_with="\n" 
f_in = sys.stdin 
parsed = sys.stdout 
seqfile= open('sequences','w')#for debug 


in_seq = 0 

c = f_in.read(1) 

while len(c) > 0 and not c=='\0': 
    while len(c)>0 and c!='\0' and not c in Estart: 
     if not c in replace : 
      parsed.write(c) 
     else: 
      parsed.write(replace_with[replace.find(c)]) 
     c = f_in.read(1) 
    while len(c)>0 and c!='\0' and not c in Estop: 
     seqfile.write(c) 
     c = f_in.read(1) 
    seqfile.write(c) #write final character 
    c = f_in.read(1) 

f_in.close() 
parsed.close() 
seqfile.close() 
+3

왜 파이썬을 게시하겠습니까? – MyKuLLSKI

0

당신은 System.Char.IsControl()을 사용할 수 있습니다로 변환하기 쉬운 충분합니다.

는 문자열에서 제어 문자를 필터링하려면 :

public string RemoveControlCharacters(string input) 
{ 
    return 
     input.Where(character => !char.IsControl(character)) 
     .Aggregate(new StringBuilder(), (builder, character) => builder.Append(character)) 
     .ToString(); 
} 

그러나 당신이 먼저 IEnumerable<char>Stream를 변환하는 방법이 필요합니다, 당신은 비슷한 일을 할 수있는 스트림에서 제어 문자를 필터링하려면.

public IEnumerable<char> _ReadCharacters(Stream input) 
{ 
    using(var reader = new StreamReader(input)) 
    { 
     while(!reader.EndOfStream) 
     { 
      foreach(var character in reader.ReadLine()) 
      { 
       yield return character; 
      } 
     } 
    } 
} 

그럼 당신은 제어 문자를 필터링하는 데이 방법을 사용할 수 있습니다 :

public string RemoveControlCharacters(Stream input) 
{ 
    return 
     _ReadCharacters(input) 
     .Where(character => !Char.IsControl(character)) 
     .Aggregate(new StringBuilder(), (builder, character) => builder.Append(character)) 
     .ToString(); 
} 
관련 문제