2009-10-08 33 views
16

Ví dụ: nếu tôi nhập "ds.35bdg56", hàm sẽ trả về 35. Có chức năng được tạo trước cho một cái gì đó như thế hay tôi cần lặp qua chuỗi, tìm số đầu tiên và xem nó mất bao lâu và sau đó trả lại?(Ruby) Có chức năng dễ dàng tìm số đầu tiên trong chuỗi không?

+1

gì nên ' ds.-35bdg56 'giải quyết? Hoặc có thể điều đó không xảy ra ... – DigitalRoss

+0

nên giải quyết thành 35 (không có âm) – sepiroth

+1

Chỉ số nguyên, hoặc nên dấu thập phân được hỗ trợ (tức là "ab3.5cd" trả về 3 hoặc 3.5?) –

Trả lời

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

Hoặc, kể từ khi bạn đã yêu cầu một chức năng ...

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

Bạn thực sự có thể có một số vui vẻ với điều này:

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

Công trình này, nhưng nó liên quan đến cách nhiều người gõ và xử lý máy tính hơn là cần thiết. Dễ dàng hơn nhiều để nhổ ra thứ bạn muốn thay vì tất cả những thứ bạn không muốn! –

+0

Ok, đã cập nhật. Gợi ý tốt. – DigitalRoss

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

Cleaner hơn các giải pháp khác. Nếu bạn muốn nó như một số nguyên, thì bạn sẽ cần '/ \ d + /. Match (văn bản) [0] .to_i'. –

+0

hoặc nếu bạn muốn một chuỗi, hãy thêm '.to_s'. Như vậy, nó trả về một đối tượng * MatchData *. – DigitalRoss

+0

x sẽ là chuỗi '" 35 "' nếu bạn muốn giá trị số nguyên, hãy thử 'x.to_i' – rampion

3
text[/\d+/].to_i 
Các vấn đề liên quan