2011-12-05 3 views
0

이 이름을 가진 모든 파일을 검색하려고합니다 : Resources.Designer.pas, Settings.Designer.pas.C# 잘못된 정규식

if (myString.Equals("*.Designer.pas")) 

하지만 경우 블록에 입력하지 않습니다 코드의

내 라인입니다. 왜?

+1

그건 정규식이 아닙니다. 'String.Equals'는 정확한 값을 검사하고 있습니다. regex와'*'와일드 카드를 사용하려면 ['IsMatch'] (http://msdn.microsoft.com/en-us/library/3y21t6y4.aspx) 메소드를 확인하십시오. – Otiel

답변

3
if (myString.EndsWith(".Designer.pas")) 
0

리터럴 문자열 "* .Designer.pas"를 참조 했으므로 이것은 아마도 존재하지 않습니다. ".Designer.pas"를 검색하는 것이 좋습니다. 그러면 검색 결과를 얻을 수 있습니다.

2

정규 표현식에서 .은 '모든 문자와 일치'를 의미하는 특수 문자입니다. 마침표를 명시 적으로 일치 시키려면 마침표를 이스케이프 처리해야합니다. 이 작업을해야합니다 :

string pattern = @".*\.Designer\.pas"; 
if (Regex.IsMatch(myString, pattern)) 

은 자세한 내용은 this MSDN 문서를 살펴 보시기 바랍니다. 그러나 위의 형식은 foo.Designer.pas.bar 형식과 일치합니다. 여기서 foobar은 임의의 문자열을 나타냅니다. 명시 적으로 .Designer.pas로 끝나는 모든 파일과 일치하려는 경우, 당신은이 같은 것을 사용해야합니다

string pattern = @".*\.Designer\.pas$"; 
if (Regex.IsMatch(myString, pattern)) 

$는 정규식 엔진을 지시 할 것이다 문자열을 일치하고 문자열의 마지막 부분인지 확인 할 수 있습니다.

+0

시퀀스를 인식 할 수없는 컴파일러 오류가 발생합니다. –

+0

답변을 변경했습니다. – npinti

2

난 당신이 또한 사용할 수 있다고 생각 :

if (myString.EndsWith(".Designer.pas", 
         StringComparison.InvariantCultureIgnoreCase)) 
0

당신이 특정 패턴과 일치하는 파일 시스템에있는 파일의 목록을 찾고 있다면, 당신은 Directory.GetFiles 사용할 수 있습니다

foreach(string f in Directory.GetFiles("C:\\YourPath", "*.Designer.pas")) 
{ 
    ... 
} 

C:\\YourPath 대신 .을 사용하여 현재 디렉터리를 사용할 수도 있습니다.

1

당신은 주어진 문자열이 ".Designer.pas"로 끝나는 수 있도록

Regex.IsMatch(str, "\.Designer\.pas$") 

이 필요합니다.