Wie schreibe ich einen regulären Ausdruck für eine Such-/Ersetzungsoperation, um bei jeder 20-stelligen Zahl nach 10 Ziffern ein Leerzeichen einzufügen?
Ich habe eine lange Liste mit Telefonnummern, von denen einige versehentlich 20 Ziffern lang sind, und ich muss zwischen jedem Vorkommen ein Leerzeichen einfügen.
Bearbeiten: Ich habe \d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d ausprobiert, wodurch 20-stellige Zahlen ausgewählt werden. Wenn Sie das jedoch durch ein Leerzeichen ersetzen, werden alle 20 Ziffern durch Leerzeichen ersetzt, anstatt nach 10 Ziffern ein Leerzeichen einzufügen.
Ich versuche, dies mit Sublime Text auf einem MacBook Pro zu tun.
Antwort1
Sie müssen verwendenErfassungsgruppenwenn Sie Ersetzungsvorgänge durchführen und dabei Komponenten der Originalzeichenfolge beibehalten möchten.
Ihr regulärer Ausdruck würde ungefähr so lauten:
Muster: "^([\d]{10})([\d]{10})" //two groups of 10
ersetzen: "$1 $2"
Die Klammern um jedes Muster für einen Zehnerblock definieren eine Erfassungsgruppe. Wir sagen also: „Die ersten zehn Ziffern sind in Gruppe $1 und die zweiten 10 sind in Gruppe $2.“ Dann sagen wir einfach: „Drucke Gruppe 1, füge ein Leerzeichen hinzu und drucke Gruppe 2.“
Beachten Sie, dass sich die Regex- und Ersetzungssyntax auf den einzelnen Plattformen unterscheiden. Viele verwenden $number
(wie sed), andere \number
(wie notepad++). Lesen Sie daher unbedingt die Dokumentation zu Ihrem Produkt.