2009-10-08 13 views
16

Zum Beispiel, wenn ich "ds.35bdg56" tippte, würde die Funktion 35 zurückgeben. Gibt es eine vorgefertigte Funktion für so etwas oder muss ich die Zeichenfolge durchlaufen, finde die erste Zahl und sehe, wie lange es geht und dann das zurückgeben?(Ruby) Gibt es eine Funktion, um die erste Zahl in einer Zeichenfolge leicht zu finden?

+1

Was soll ' ds-35bdg56 'auflösen? Oder kann das einfach nicht passieren ... – DigitalRoss

+0

sollte auf 35 (keine Negative) auflösen – sepiroth

+1

Nur ganze Zahlen, oder sollten Dezimalpunkte unterstützt werden (dh soll "ab3.5cd" 3 oder 3.5 zurückgeben?) –

Antwort

21
>> 'ds.35bdg56'[/\d+/] 
=> "35" 

Oder, da sie eine Funktion fragen haben ...

$ irb 
>> def f x; x[/\d+/] end 
=> nil 
>> f 'ds.35bdg56' 
=> "35" 

Sie wirklich etwas Spaß mit diesem haben könnte:

>> class String; def firstNumber; self[/\d+/]; end; end 
=> nil 
>> 'ds.35bdg56'.firstNumber 
=> "35" 
+0

Das funktioniert, aber es geht darum mehr menschliche Eingabe und Computerverarbeitung als nötig. Viel einfacher, das Ding herauszupicken, als Sie alle Sachen ersetzen wollen, die Sie nicht wollen! –

+0

Ok, aktualisiert. Guter Vorschlag. – DigitalRoss

4
text = "ds.35bdg56" 
x = /\d+/.match(text) 
puts x #will return 35 (i hope this helps) 
+0

Reiniger als die anderen Lösungen. Wenn du es als Integer willst, brauchst du '/ \ d + /. Match (text) [0] .to_i'. –

+0

oder wenn Sie eine Zeichenfolge möchten, fügen Sie '.to_s' hinzu. Wie es ist, gibt es ein * MatchData * -Objekt zurück. – DigitalRoss

+0

x wird der String '" 35 "' wenn Sie den Integer-Wert wollen, versuchen Sie 'x.to_i' – rampion

3
text[/\d+/].to_i 
Verwandte Themen