Wie zum extrahieren einer Zahl aus einem string in Perl?
Habe ich
print $str;
abcd*%1234$sdfsd..#d
Den string immer nur eine durchgehende Strecke von zahlen, wie 1234
in diesem Fall. Die anderen werden entweder Buchstaben oder andere Sonderzeichen.
Wie kann ich extrahieren Sie die Nummer (1234
in diesem Fall), und speichern Sie es zurück in str
?
Auf dieser Seite deutet darauf hin, dass ich verwenden soll \d
- aber wie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese entfernt alle nondigit Zeichen aus dem string. Das ist alles, was Sie tun müssen.
EDIT: wenn Unicode-Ziffern in anderen Skripten vorhanden sein können, die bessere Lösung ist:
.
,e
die möglicherweise benutzt werden, um eine float. Auch\d
ist nicht nur[0-9]
aufgrund der Unicode-Unterstützung in Perl: Ziffern in anderen Glyphen (wie die Indische) gültig sind. Also regexp wird auch akzeptiert strings, die nicht zahlen.Wenn Sie nicht möchten, ändern Sie die ursprüngliche Zeichenfolge ist, können Sie extrahieren Sie die zahlen durch die Erfassung von Ihnen in der regex, mit Subpattern. In der Listen-Kontext, einen regulären Ausdruck gibt das entspricht der Definition in der Subpattern.
Wenn Sie wollte, es zu tun, die destruktive Art und Weise, ist dies der Schnellste Weg, es zu tun.
tr
anslate alle Zeichen in derc
omplement des0-9
nichtsd
elete Sie.Ein Nachteil dieses Ansatzes, und Phillip Potter, ist, dass gab es eine andere Gruppe von Ziffern weiter unten in der Zeichenfolge, Sie würden verkettet werden mit der ersten Gruppe von Ziffern. Es ist also nicht klar, dass Sie möchten, dies zu tun.
Der todsichere Weg, um eine und nur eine Gruppe von Ziffern ist
Dem Spiel in eine Liste Kontext: gibt eine Liste erfasst. Die Klammern um
$str
sind einfach zu setzen, wird der Ausdruck in eine Liste Kontext, und weisen die erste Aufzeichnung zu$str
.Persönlich würde ich es so machen:
$1 enthält die erste Gruppe entsprach dem angegebenen regulären Ausdruck (der Teil in Runden Klammern).
$1
,$2
usw, es sei denn, Sie haben zunächst bestätigt, dass Ihr match erfolgreich war. Capture-variable nur (re.) auf ein erfolgreiches match, wenn$s
in deinem Beispiel nicht alle stellen erhalten Sie das Ergebnis Ihrer letzten Suche.if($s =~ /([0-9]+)/) print $1
den richtigen Weg, um die Gruppierung der Variablen?