Wie extrahiere ich eine Zahl aus einer Zeichenkette in Perl?

8

Ich habe

%Vor%

Die Zeichenfolge hätte immer nur eine fortlaufende Anzahl von Zahlen, wie in diesem Fall 1234 . Rest alle werden entweder Alphabete oder andere Sonderzeichen sein.

Wie kann ich die Zahl ( 1234 in diesem Fall) extrahieren und in str speichern?

Diese Seite schlägt vor, dass ich \d verwenden soll, aber wie?

    
Lazer 26.08.2010, 12:10
quelle

4 Antworten

17
%Vor%

Dadurch werden alle nicht-numerischen Zeichen aus der Zeichenfolge entfernt. Das ist alles was du tun musst.

BEARBEITEN: Wenn Unicode-Ziffern in anderen Skripten vorhanden sein sollten, ist eine bessere Lösung:

%Vor%     
Philip Potter 26.08.2010, 12:13
quelle
26

Wenn Sie die ursprüngliche Zeichenfolge nicht ändern möchten, können Sie die Zahlen extrahieren, indem Sie sie in der Regex mithilfe von Untermustern erfassen. Im Listenkontext gibt ein regulärer Ausdruck die in den Untermustern definierten Übereinstimmungen zurück.

%Vor%     
FMc 26.08.2010 12:18
quelle
4

Wenn Sie es auf die destruktive Weise tun wollten, ist dies der schnellste Weg, es zu tun.

%Vor%

tr zeigt alle Zeichen im c omplement von% co_de an % zu nichts, 0-9 löscht sie.

Der einzige Vorbehalt zu diesem Ansatz und Phillip Potter ist, dass dort, wo sich eine weitere Gruppe von Ziffern weiter unten in der Zeichenfolge befindet, diese mit der ersten Gruppe von Ziffern verkettet werden. Es ist also nicht klar, dass du das machen willst.

Der sicherste Weg, um eine einzige Zifferngruppe zu erhalten, ist

%Vor%

Die Übereinstimmung in einem Listenkontext gibt eine Liste von Captures zurück. Die Parens um d setzen den Ausdruck einfach in einen Listenkontext und weisen das erste Capture $str zu.

    
Axeman 26.08.2010 13:22
quelle
1

Persönlich würde ich es so machen:

%Vor%

$ 1 enthält die erste Gruppe, die mit dem angegebenen regulären Ausdruck übereinstimmt (der Teil in runden Klammern).

    
Ziggy 26.08.2010 12:35
quelle

Tags und Links