So entfernen Sie Nummern aus diesem string in perl?
Ich habe eine situation wo ich brauche, um Sie zu entfernen (oder ersetzen) N zahlen, wenn Sie zwischen literal-Zeichen.
Zum Beispiel:
00000ASEDF32434VSC
Brauche ich 32434 entfernt werden, so dass die Ausgabe lautet:
00000ASEDFVSC
Und wenn ich will, zu ersetzen, 32434 mit XXXXX ?
Wie es zu tun mit regexes?
BEARBEITEN
Wählte ich ein sehr blödes Beispiel.Sorry.
Bedenken Sie:
00000SQWDDWE12CSDCASEDF32434VSC
Ich brauche zu ersetzen (oder zu entfernen) nur das Muster 32434.
Im Allgemeinen Fall: wenn ich eine alphanumerische Zeichenfolge wie
entfernen Sie ein pattern von N (sagen wir 5) zahlen, wenn Sie zwischen
literal-Zeichen?
Dank.
- kennen Sie N im Voraus? in meiner Lösung, die ich verwendet 5, aber Frage ist es dynamisch, hängt von Eingabe-oder etwas, was Sie bereits wissen, ohne zu raten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was meinst du mit "Zeichen"? Meinst du "Briefe"? Die folgenden entfernt eine Folge von 5 Ziffern (0-9), die beide sind vorausgegangen und gefolgt von einem Buchstaben.
Frei frei ändern
5
für eine variable.Seit Perl 5.14+, die Sie verwenden können
\d
zu bedeuten[0-9]
mithilfe/a
. (Ohne/a
,\d
Spiele über 400 unterschiedliche Zeichen.)Können wir mit einem lookahead
(?=...)
und ein lookbehind(?<=...)
zu behaupten, dass die zahlen vorangestellt und gefolgt von nicht-zahlen. Diese entfernen würde, diese geschlossenen Nummern:Den wir geben können, eine andere substitution, oder auch code, der ausgeführt wird. Hier für die variable-Länge
X
:/e
ausgeführt, die Ersetzung und diex
ist die wenig genutzte Wiederholung Betreiber.Hier ist ein Unterprogramm, das gibt den string zurück, der alle mit dieser Anzahl Sequenzen entfernt, mit optionaler minimum-und maximum-Länge möglich:
Den Anruf
wäre äquivalent zu
$str =~ s/(?<=\D)(\d{5})(?=\D)/XXXXX/
. Der Aufrufwäre äquivalent zu meinem zweiten code-Beispiel.
Verwenden Sie diesen code zu entfernen:
und diese zu ersetzen:
wo die 5 ist, wie viele zahlen, die Sie ersetzen müssen.
/i
Teil - es ist dort aus einem Grund$1
und$2
im Ersatzteil, nicht\1
und\2
\1 better written as $1
perldoc.perl.org/perldiag.html#%5C1-better-written-as-%241Können Sie ziehen Sie den relevanten Teil zu ersetzen, dann packen Sie es. Ich gehe davon aus, dass es nur eine einzige Instanz von zahlen. So ist es egal, wie viele, aber ersetzen Sie immer mit der gleichen Anzahl von 'X...
Werden Sie wahrscheinlich wollen sicherstellen, dass die regex gelang es aber!
Antwort auf dein edit: Sie wirklich wollen, zu entfernen einer bestimmten Anzahl...
Oder wenn Sie wollen, 5-stellig (dies wurde bereits beantwortet)
Diese entfernen würde, alle zahlen von 1-9 stehen. Würde das funktionieren?
Ersetzen sollte, nur wenn man die zahlen zwischen den strings, aber auch nicht sicher, ob es funktioniert.
X
für jedes Zeichen ersetzt, glaube ich. So dass Sie entweder zu extrahieren und den Teil dazwischen und schieben Sie es zurück in mit die richtige Anzahl vonX
s oder Sie können tun, ein zu einer Zeit, bis es nicht mehr passt (daX
ist eine legitime alpha-Zeichen.