2014-03-28 2 views
0

나는 정규식을 사용하는 것에 상당히 익숙하며 아직 모든 것에 대한 구문에 대해서는 완전히 명확하지 않다. 기본적으로 나는 가지고있는 코드의 일부에 붙어있다 :정규식을 문자열과 결합하려면 어떻게해야합니까?

if(@"\d{2,}\s"+string == Path.GetFileNameWithoutExtension(dir)) 
{ 
    do stuff 
} 

내 문제는 어떤 것도 일치하지 않는다는 것이다. 필자는 기본적으로 파일 검색을 통해 두 자리와 공백이 있으며 사용자가 검색하는 이름을 찾습니다. 내가 정규식 + 문자열을 결합 할 수 또는 정규식/문을 문제가 무엇입니까? 명확하게하기 위해 실제로 파일에서 두 자릿수와 공백을 제거하면 일치합니다. 문제가 분명하다면 며칠 동안 정규식을 가지고 놀았습니다. ...

+0

확실히 C# 구문이 올바르지 않습니다. – MarcinJuraszek

+0

String == 정규 표현식과 관련이 없습니다. 문자 그대로의 텍스트를 비교합니다. Regex.IsMatch 또는 Regex.Matches를 사용하여 문자열을 정규식과 비교할 때 == –

+1

이 아닌 정규 표현식을 평가할 필요가 있습니다. 그것은 단순히'\ d {2,} \ s'와'string'의 내용을 하나의 문자열로 연결합니다 - 당신이 "정규식"이라고 부르는 것은 단순한 리터럴 문자열 일 것입니다. 정규식을 해킹하려고 시도하는 대신 (항상 적절하지는 않음) 왜 성취하려고하는지 설명하고 왜 그렇게해야하는지 묻지 않겠습니까? –

답변

3

if 진술 문은 정규 표현식 패턴과 일치하지 않으므로 단순히 두 문자열을 비교하는 것입니다. 이것이 바로 Regex.IsMatch 방법입니다. 또한 Regex.Escape을 사용하여 정규식 패턴을 임의의 문자열과 결합하는 것이 좋습니다.

이 시도 :

using System.Text.RegularExpressions; 

... 

var pattern = @"\d{2,}\s" + Regex.Escape(myString); 
var fileName = Path.GetFileNameWithoutExtension(dir); 
if (Regex.IsMatch(fileName, pattern)) 
{ 
    // do stuff 
} 
+0

감사합니다. 완벽하게 작동했습니다. – CrzyGK

0

당신은 실제로 목표를 복잡하게 걸쳐있을 수 있습니다 사실, 그 인스턴스에서 정규 표현식을 사용할 필요가 없습니다. 전체 정규 표현식을 사용하는 헤드셋 당신, 당신이이 라인을 따라 뭔가 더 할 것입니다 경우

string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
string [] file = Directory.GetFiles(path, @"11_*.txt", SearchOption.AllDirectories); 
foreach(string f in file) 
{ 
    // Do Something. 
} 

:

정규 표현식을 사용하는 방법 중 하나입니다
using System.Text.RegularExpressions; 

... 

    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
    var file = Regex.IsMatch(path, @"\d{2,}\2"); 
    if(file == true) 
    { 
     // Do Something 
    } 

, 그들은 훨씬 더 강력한 Linq과 함께 할 수 있습니다. 나는 MSDN에서 이것을 연구 할 것을 강력히 권할 것이지만, 그것은 확실한 자원을 가지고있다.

관련 문제