Verwenden von Regex zum Hinzufügen von führenden Nullen
Ich würde gerne hinzufügen einer bestimmten Anzahl führender Nullen (z.B. bis zu 3) alle zahlen einer Zeichenkette. Zum Beispiel:
Eingang: /2009/5/song 01 of 12
Ausgabe: /2009/0005/song 0001 of 0012
Was ist der beste Weg, dies zu tun mit regulären Ausdrücken?
Edit:
Nahm ich die erste richtige Antwort. Aber alle Antworten sind es Wert, gelesen zu werden.
InformationsquelleAutor der Frage hpique | 2010-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas, das unterstützt einen Rückruf, so können Sie das match:
InformationsquelleAutor der Antwort Ignacio Vazquez-Abrams
In Perl:
InformationsquelleAutor der Antwort Snowhare
Ein Beispiel:
Hinweis:
Ich kann nicht glauben, eine einzige regex-ohne Verwendung von callbacks für jetzt* (gibt es vielleicht einen Weg, es zu tun).
Hier sind zwei reguläre Ausdrücke zu verarbeiten, dass:
InformationsquelleAutor der Antwort YOU
Mithilfe
c#
:InformationsquelleAutor der Antwort Alex
Anderen Ansatz:
Oder:
InformationsquelleAutor der Antwort YOU
Wenn Ihr regulärer Ausdruck-Implementierung unterstützt nicht Blick-hinter-und/oder look-ahead-assertions, können Sie auch mit diesem regulären Ausdruck:
Und ersetzen Sie das Spiel mit
$1 + padLeft($2, 4, "0") + $3
wo$1
ist das match von der ersten Gruppe und derpadLeft(str, length, padding)
ist eine Funktion, die Präfixestr
mitpadding
bis die Längelength
erreicht ist.InformationsquelleAutor der Antwort Gumbo
<warning>
Dies geht von akademischen Interesse, natürlich sollten Sie die Verwendung von Rückrufen zu tun, es klar und richtig</warning>
Ich bin in der Lage, um den Missbrauch von regulären Ausdrücken zu haben zwei führenden Nullen (.NET-Geschmack):
Es funktioniert nicht, wenn es eine Zahl am Anfang des Strings. Dies funktioniert durch Anpassung der Breite 0, bevor eine Zahl oder das Zeichen vor einer Nummer, und ersetzen Sie Sie mit 0.
Hatte ich kein Glück die Erweiterung auf drei führende Nullen, und schon gar nicht mehr.
InformationsquelleAutor der Antwort Kobi
Hier ist eine Perl-Lösung ohne callbacks oder Rekursion. Es nutzt die Perl-regex-Erweiterung des code-Ausführung anstelle des geraden substitution (die
e
- Schalter) dieser ist aber sehr leicht auf andere Sprachen erweitert, dass der Mangel, konstruieren.Ausgabe:
InformationsquelleAutor der Antwort dawg
Kombiniert in Xcode:
Gibt 00123) aufweisen für die Zahl 123
InformationsquelleAutor der Antwort Vincent
Gültiger Scala-Programm zu ersetzen, die alle Gruppen von n Ziffern 4.
$$
entweicht die Zeilenende-char$
weil wir mit StringContext (string Präfix von s).InformationsquelleAutor der Antwort Mikaël Mayer