2009-07-16 10 views
1

Ich bin auf der Suche nach Hilfe in zu extrahieren, wie einen regulären Ausdruck zu erstellen, die einen Teilstring aus einem String extrahiert, die wie folgt aussieht:Regulärer Ausdruck Dateinamen nach einer Figur und ohne Verlängerung

test123 # AMMA-testfile Datei sind. xml

zu ...

AMMA-Datei testfile des

Im Grunde das erste "#" und alles, bevor es zu entfernen. Außerdem entfernen Sie die Dateierweiterung ".xml".

Jede Hilfe wird geschätzt, da ich gerade mit Regex anfange. Dies wird in einer Nintex-Workflowaktion verwendet, die die .NET API für reguläre Ausdrücke unterstützt.

Antwort

1

Die Zeichenfolge, die Sie suchen, wird in der ersten Gruppe sein.

/#(.+?)\.xml$/ 

In C#

String extractFilename(String s) 
{ 
    Regex r = new Regex(@"#(?<filename>.+?)\.xml$", RegexOptions.Compiled); 
    return r.Match(s).Result("${filename}"); 
} 

Edits: entfernt die # entweichende, hinzugefügt Zeilenende Qualifier zur Verlängerung und hinzugefügt C# Beispiel

+0

Schnelle Antwort von allen, vielen Dank. Nintex lässt es nicht zu, dass ich Code direkt in die Workflow-Aktion schreibe, um Gruppe 1 zu erhalten. Deshalb habe ich das obige Beispiel verwendet, um einen Web-Service zu erstellen, der die Arbeit aufruft und aufruft. –

3

Anchor das Muster am Ende der Zeichenfolge :

/#(.+)\.xml$/ 
1

wenn Sie auf exte aufpassen möchten nsions andere als xml

/#(.+)\..*$/ 
+1

sollte das Ende übereinstimmen \. [^ \.] + $ So file..ext schneidet nur die letzte .ext –

+0

yeah .. das ist richtig –

0

Edit: offensichtlich ist dies nicht Regex, aber es ist schneller als regex für diesen Einsatz, damit ich es enthalten.

Path.GetFileNameWithoutExtension(s.Substring(s.IndexOf('#') + 1));