所以我想要的是得到 n 個字符,直到它遇到一個特定的字符。
我有這個字串:
a='2.452811139617034,42.10874821716908|3.132087902867818,42.028314077306646|-0.07934861041448178,41.647538468746916|-0.07948265046522918,41.64754863599606'
我怎樣才能讓它只到達角色?,但沒有得到那個字符,得到它像這樣:
2.452811139617034,42.10874821716908
uj5u.com熱心網友回復:
你可以簡單地這樣做:
a.split('|').first
uj5u.com熱心網友回復:
您可以通過使用來避免創建不必要的陣列(如Array#split)或使用正則運算式(如Array#gsub)。
a = "2.452811139617034,42.10874821716908|3.132087902867818,42.028314077306646|-0.07934861041448178,41.647538468746916|-0.07948265046522918,41.64754863599606"
a[0,a.index('|')]
#=>"2.452811139617034,42.1087482171"
這意味著選擇位置 0 直到第一個管道 ( |)的索引處的字符。從技術上講,它從位置 0 開始并選擇 n 的長度,其中 n 是管道字符的索引,在這種情況下有效,因為 ruby?? 使用基于 0 的索引。
uj5u.com熱心網友回復:
a[/[^|] /]
#=> "2.452811139617034,42.10874821716908"
正則運算式只是匹配盡可能多的字符'|'。
uj5u.com熱心網友回復:
一種方法使用gsub替換:
a = "2.452811139617034,42.10874821716908|3.132087902867818,42.028314077306646|-0.07934861041448178,41.647538468746916|-0.07948265046522918,41.64754863599606"
output = a.gsub(/\|.*$/, "")
puts output # 2.452811139617034,42.10874821716908
uj5u.com熱心網友回復:
我總是對各種選項的性能感到好奇,因此我冒昧地回圈瀏覽了一些建議的方法。我將它們命名如下:
split_all = a.split('|').first
partition = a.partition('|').first
split_two = a.split('|', 2).first
string_brack_args = a[0,a.index('|')]
string_brack_range = a[0...a.index('|')]
gsub_regex = a.gsub(/\|.*$/, "")
plain_regex = a[/[^|] /]
結果如下(最慢的在頂部):
user system total real
gsub_regex 0.170000 0.000000 0.170000 ( 0.162666)
split_all 0.110000 0.000000 0.110000 ( 0.109498)
split_two 0.040000 0.000000 0.040000 ( 0.041792)
partition 0.040000 0.000000 0.040000 ( 0.037161)
string_brack_range 0.030000 0.000000 0.030000 ( 0.034021)
plain_regex 0.040000 0.000000 0.040000 ( 0.033468)
string_brack_args 0.020000 0.000000 0.020000 ( 0.022455)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/402859.html
標籤:
