2012-04-02 19 views
0

Ich versuche herauszufinden, welche Regex Dateinamen in Anführungszeichen übereinstimmen. Z.B.Regulärer Ausdruck mit Dateiname

blah blah rubarb "someFile.txt" blah 
rubard "anotherFile.txt" blah blah 

würde Ich mag

someFile.txt 
anotherFile.txt 

Ich bin mit .NET übereinstimmen. Ich gehe jetzt durch die Dokumentation, aber jede Hilfe wird sehr geschätzt.

+0

Warum 'Regex' dafür? Sieht aus wie 'string.split' wird gut funktionieren. – Oded

+0

@Oded Ich möchte den Code sehen :) –

+1

@the_joric - Was? 'myString.Split ('' ') [1]'? – Oded

Antwort

2

Dies trifft auf alle nicht-Leerzeichen und 3-4 Zeichen Erweiterung in Dateinamen.

\"(\S+\.\w{3,4})\" 
+0

@ MylesMcDonnell - beachten Sie, dass diese Regex die '' 's in der Übereinstimmung – Robbie

+0

@MylesMcDonnel enthält, es wird auch keine Dateien mit Erweiterungen von 2 Zeichen oder mehr als 4 Zeichen übereinstimmen. So wird 'myfile.cs' nicht übereinstimmen und auch nicht' myfile.csproj' – Robbie

+0

Um Dateien mit mindestens 2 Zeichen oder 2 bis n Zeichen in Erweiterung einzufügen, kann man '\ w {2,}' verwenden. Um Dateien mit mindestens einem Zeichen in der Erweiterung einzuschließen, kann man '\ w +' verwenden. – Coder

1

Versuchen Sie folgendes:

\"(\w+\.\w+)\" 

Hinweis:\ s zu entkommen Erinnern Sie sich ...

5

versuchen Sie dies:

(?<=")\w+\.\w+(?=") 

Dies wird nicht die Zitate im Spiel enthalten.

HINWEIS: Ich habe eine Annahme mit diesem Regex gemacht. Ich nehme an, dass der Dateiname nur ein einzelnes . Zeichen enthält. So wird my.file.txt nicht übereinstimmen. Wenn Sie das benötigen, lassen Sie es mich wissen und ich werde es aktualisieren.

Im Folgenden wird gezeigt, wie Sie dies im C# -Code verwenden, um alle Übereinstimmungen zu durchlaufen.

try { 
    Regex regexObj = new Regex(@"(?<="")\w+\.\w+(?="")"); 
    Match matchResults = regexObj.Match(subjectString); 
    while (matchResults.Success) { 
     // matched text: matchResults.Value 
     // match start: matchResults.Index 
     // match length: matchResults.Length 
     matchResults = matchResults.NextMatch(); 
    } 
} catch (ArgumentException ex) { 
    // Syntax error in the regular expression 
} 

und hier sind einige Kommentare, die Sie es verstehen helfen:

@" 
(?<= # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind) 
    ""  # Match the character “""” literally 
) 
\w  # Match a single character that is a “word character” (letters, digits, and underscores) 
    +  # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
\.  # Match the character “.” literally 
\w  # Match a single character that is a “word character” (letters, digits, and underscores) 
    +  # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
(?=  # Assert that the regex below can be matched, starting at this position (positive lookahead) 
    ""  # Match the character “""” literally 
) 
"