2009-10-08 9 views
16

Na przykład, jeśli wpiszesz "ds.35bdg56" funkcja zwróci 35. Czy istnieje gotowa funkcja dla czegoś podobnego lub czy potrzebuję do iteracji ciągu, znaleźć pierwszą liczbę i zobaczyć, jak długo to działa a następnie wróć to?(Ruby) Czy istnieje funkcja do łatwego znajdowania pierwszej liczby w ciągu znaków?

+1

Co powinien " ds.-35bdg56 "rozwiązać? A może tak się nie stanie ... – DigitalRoss

+0

powinien rozwiązać do 35 (bez negatywów) – sepiroth

+1

Tylko liczby całkowite, czy też powinny być obsługiwane liczby dziesiętne (tj. Czy "ab3.5cd" powinien powrócić 3 lub 3.5?) –

Odpowiedz

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

Albo, skoro zrobiłeś poprosić o funkcji ...

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

Można naprawdę mieć trochę zabawy z tym:

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

To działa, ale wiąże się ze sposobem bardziej ludzkie pisanie na klawiaturze i przetwarzanie komputerowe niż to konieczne. O wiele łatwiej jest wyrwać to, co chcesz, niż wymienić wszystkie rzeczy, których nie chcesz! –

+0

OK, zaktualizowano. Dobry pomysł. – DigitalRoss

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

Czystsze niż inne rozwiązania. Jeśli chcesz, aby był on liczbą całkowitą, potrzebujesz '/ \ d + /. Match (text) [0] .to_i'. –

+0

lub jeśli chcesz ciąg znaków, dodaj '.to_s'. Jak to, zwraca obiekt * MatchData *. – DigitalRoss

+0

x będzie ciągiem '" 35 "' jeśli chcesz wartość całkowitą, spróbuj 'x.to_i' – rampion

3
text[/\d+/].to_i 
Powiązane problemy