2010-06-28 2 views
6

저는 RegEx를 처음 사용하기 때문에 누군가 정확하게 여기에 잘못되어있는 것이 무엇인지 알아낼 수 있습니까? 아무것도 오류 다음 한정 기호 {X, Y} - 내 앱이 regExPattern 라인을 칠 때RegEx - 아무런 오류가없는 한정자 {x, y}

 string regPattern = "*[~#%&*{}/<>?|\"-]+*"; 
     string replacement = ""; 
     Regex regExPattern = new Regex(regPattern); 

아직, 내가 ArgumentException이 얻을 :

나는이 코드를 가지고있다.

누군가 도움을 줄 수 있습니까?

편집 : 나는 그렇게처럼 foreach 루프로이 패턴을 전달해야

if (paths.Contains(regPattern)) 
     { 
      foreach (string files2 in paths) 
      { 
       try 
       { 
        string filenameOnly = Path.GetFileName(files2); 
        string pathOnly = Path.GetDirectoryName(files2); 
        string sanitizedFileName = regExPattern.Replace(filenameOnly, replacement); 
        string sanitized = Path.Combine(pathOnly, sanitizedFileName); 
        //write to streamwriter 
        System.IO.File.Move(files2, sanitized); 

       } 
       catch (Exception ex) 
       { 
        //write to streamwriter 

       } 
      } 
     } 
     else 
     { 
     //write to streamwriter 

     } 

어떻게 패턴을 정의합니까이이 루프로 전달되는 경우?

+0

구체적으로 말해서 코드에있는 패턴은 파일 이름에 유효하지 않은 문자를 없애기위한 것입니다. 따라서 별표, 물결표, 파운드 기호, 대괄호, 꺾쇠 괄호 등을 제거해야합니다. 이것이 올바른 패턴입니까? – yeahumok

답변

6

업데이트 : 내가 생각하는 질문에 대한 코멘트를 읽은 후 당신이 원하는 단순히이 :

s = Regex.Replace(s, "[~#%&*{}/<>?|\"-]+", ""); 

올드 대답 : 당신은 당신이 입력해야하는 와일드 카드를 생각하고 *을 쓸 때 같아요 쉘에서 :

* .txt 인

이되지 않습니다 어떻게 정규 표현식 구문에서 * 작품. 당신이 아마 대신 원하는 것은 .*입니다 :

".*[~#%&*{}/<>?|\"-]+.*" 

. 수단 "모든 문자"및 * 수단 "제로 또는 이전의 더".

문자 클래스 [...] 안에는 *이 특별한 의미를 잃어서 리터럴 문자가되므로 이스케이프 할 필요가 없습니다. 문자 클래스 내에서 불필요하게 이스케이프해도 아무런 해가되지 않으며 일부 사람들은 읽기 쉽습니다.

+0

*은 별표를 의미하며 문자가 아닙니다. 아직도 백 슬래시가 필요합니까? – yeahumok

+0

'*'의 의미는 그것이 문자 클래스인지 아닌지에 따라 바뀝니다. 문자 클래스 안에는 이스케이프 처리 여부에 관계없이 문자'*'가 사용됩니다. 문자 클래스 밖에서는 이스케이프 처리되지 않은 경우 "0 이상"을 의미하고 이스케이프 처리되면 리터럴'* '을 의미합니다. –

+0

+1 (개정판) 및 C#에서는 정규 표현식에 축 어적 문자열을 사용해야합니다.이스케이프 문자로 백 슬래시를 사용하지 않습니다. 따옴표를 사용하여 따옴표를 이스케이프하면됩니다.'@ "[~ # % & * {}/<>? |"-] + "' –

1

*은 "0 번 이상"({0,}과 동일)을 의미하는 한정 기호입니다. \*

0

당신이 대체 할 Regex.Replace을 다하고 있기 때문에 이러한 한 성격의 빈 문자열과 일치 :

 string pattern = "[~#%&*{}/()<>?|\"\\\\-^[\\]]"; 

     string input = @"(*&af%\#$}afd]a#f%hjg{d(^(^[RF*()^FR(7r5"; 

     string output = Regex.Replace(input, pattern, String.Empty); 
0

. 추가 당신은이 같은 백 슬래시를 사용하여 탈출해야합니다 예 : *

예를 들어 string regPattern = ".*[~#%&*{}/<>?|\"-]+.*";