2014-07-08 5 views
0

저는 C# 응용 프로그램을 작성하고 있습니다.한 단어와 일치하는 정규식

내가 같은 패턴에 대한 문자열과 일치하는 것이다 정규식 작성하려고 해요 : 다음, 어떤 문자 다음 시간의 수, 기간 :

를 목적은 문자열이 패턴과 일치하는지 여부를 테스트됩니다 bla and blo, bli 또는 blu, 그 다음 기간, 그리고 확장 목록. 또한 대소 문자를 구분해야합니다. 여기

는 지금까지

var pattern = string.Format(@".*\.(?i){0}\.(?:ext|ext1|ext2|ext3)", "bla"); 

그것은 즐로 문자열을 찾기위한 잘 작동이 것입니다. 자, 똑같은 위치에있는 3 개의 chars 문자열 목록을 걸러 내고 싶습니다.

내가에서는 FileInfo 항목 어떤 문자 할 것 파일 이름

  • 예를의 목록을 가지고있다. bla .ext
  • char가 수행 할 fileName의 예입니다. bla .ext1
  • 모든 char이 수행 할 수있는 예입니다. bla .ext2
  • 모든 char이 수행 할 수있는 예입니다. blu .ext
  • 모든 char이 수행 할 fileName의 예입니다. blo .ext1
  • 모든 char이 수행 할 수있는 예입니다. BLI .ext2

난과 같이 위에서 설명한 패턴과 일치하는 사람들을 검색하고 싶습니다 : 어떤 문자 할 것 파일 이름

  • 예. bla .ext
  • char가 수행 할 fileName의 예입니다. bla .ext1
  • 모든 char이 수행 할 수있는 예입니다. bla .ext2

괜찮습니다.

  • char가 수행 할 fileName의 예입니다. blu .ext
  • 모든 char이 수행 할 fileName의 예입니다. blo .ext1
  • 모든 char이 수행 할 수있는 예입니다. bli .ext2

이것은 아닙니다.

어떤 아이디어라도 감사 할 것입니다.

+0

는 언어와 일치하는 사람을 검색하여, 다른 방법으로 주위나요? – hjpotter92

+0

무엇이'{0}'입니까? 매개 변수 자리 표시 자입니까? 그렇다면 샘플 입력과 출력을 제공 할 수 있습니까? – Bohemian

+0

내 대답을 업데이트했습니다. 그러나 질문을 편집하여 다른 사람들이 비슷한 Regex 질문 (특정 확장명을 가진 파일을 검색하는 것처럼)을 사용할 수 있도록하는 것이 좋습니다. – Hosein

답변

0

string.Format() 또는 (?i) 또는 (?:ext|ext1|ext2|ext3) 같은 것을 사용하여 왜 계속 복잡하게 만드는 지 잘 모르겠습니다.

var list = Directory.GetFiles(path).Where(file => Regex.IsMatch(file, @"^.+\.bla\.ext[1-3]*$", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase)).ToList(); 

을 물론 나는 정규식의 인스턴스를 사용하는 것이 좋습니다 대신 performance 더 나은 정적 IsMatch 방법을 사용하여,하지만 난 당신이 스스로 그렇게 할거야 :보십시오.

+0

나는 나의 질문을 편집했다, 내가 달성하려고 노력하고있는 것을 더 잘 이해할 수 있기를 희망한다. – Louitbol

0

알려줘야, 나는 모든 파일하지만 다음과 같은 패턴

var pattern = string.Format(@".*\.(?i)(?:{0})\.(?:ext|ext1|ext2|ext3)", new List<string>() { "bli", "blo", "blu"}); 

listTmp.AddRange(Directory.GetFiles(myPath)) 
          .Where(f => !new Regex(pattern).IsMatch(f)).ToList()); 
관련 문제