2009-04-15 2 views

Antwort

2

I ‚havent versucht, dies aberHaben versucht, arbeitet: wie etwa das allgemeine Muster zu ändern, anstatt eine positive Vorschau zu benutzen? Auf diese Weise sollte es funktionieren:

[0-9a-z](?=[0-9a-z]{0,4}\.) 

Im Grunde ist dies findet jede (alphanumerischen) Zeichen gefolgt von bis zu vier weiteren alphanumerischen Zeichen und eine Periode. Dies könnte nur funktionieren, um die letzten fünf Zeichen vor der Periode nacheinander abzugleichen. Es ist jedoch höllisch ineffizient, und es funktioniert nur mit Engines, die Lookahead-Muster mit variabler Breite zulassen.

+0

Funktioniert für mich in .NET. –

0

Versuchen Sie, das Sternchen nach der schließenden Klammer zu "{5}" (keine Anführungszeichen) zu ändern. Dies hängt ein wenig vom Funktionsumfang Ihrer Regex-Umgebung ab, aber das ist eine übliche Syntax.

+0

Das bricht es (das Ext wird jetzt ###). –

0

Die Regex stimmt mit einem Zeichen (0 bis 9) überein, dem kein Punkt vorangestellt ist, dann keine Zahl von 0 bis 9 oder von a bis z.

Die Ersatzleitung ist für den Mehrfachersatz zuständig. Sie möchten also die Replace-Methode verwenden, die eine extra parameter count hat.

so würde der Code wie folgt aussehen:

Regex r = new Regex("(?<!\\.[0-9a-z]*)[0-9]"); 
return r.Replace(sz, "#", 5); 
+0

Nicht getestet, aber dies sollte eigentlich die ersten 5 Ziffern ersetzen, so dass Sie "##### 1111.000" erhalten, was nicht das ist, was Sie wollen. Also geh mit Konrads Lösung. –

Verwandte Themen