Q
獲取紅寶石
12
A
回答
19
試試這個:
res = []
"abab".scan(/a/) do |c|
res << [c, $~.offset(0)[0]]
end
res.inspect # => [["a", 0], ["a", 2]]
1
讓我吃驚,沒有類似String#scan
這將返回MatchData
對象的數組,類似於String#match
任何方法。所以,如果你喜歡猴子打補丁,你可以與託德的解決方案結合本(Enumerator
在1.9中引入):
class Regexp
def scan str
Enumerator.new do |y|
str.scan(self) do
y << Regexp.last_match
end
end
end
end
#=> nil
/a/.scan('abab').map{|m| m.offset(0)[0]}
#=> [0, 2]
+0
NoMethodError:undefined method'scan'for – Andy 2016-01-07 12:49:43
6
有一個疑難雜症看出來這裏,這取決於你所期望的行爲。
如果您在"dadad"
搜索/dad/
你只能得到[["dad",0]]
因爲scan
進步到每場比賽結束的時候找到一個(這是我錯了)。
我想出了這樣的選擇:
def scan_str(str, pattern)
res = []
(0..str.length).each do |i|
res << [Regexp.last_match.to_s, i] if str[i..-1] =~ /^#{pattern}/
end
res
end
如果你想你也可以從標準庫中做類似的事情與StringScanner,它可能是長字符串更快。
4
非常相似,@jim說,並適用於較長的串好一點:
def matches str, pattern
arr = []
while (str && (m = str.match pattern))
offset = m.offset(0).first
arr << offset + (arr[-1] ? arr[-1] + 1 : 0)
str = str[(offset + 1)..-1]
end
arr
end
相關問題
- 1. 獲取紅寶石
- 2. 獲取紅寶石
- 3. 紅寶石獲取價值
- 4. 提取紅寶石
- 5. 紅寶石寶石mongo取決於bson1.10.12
- 6. 獲取寶石的版本紅寶石內
- 7. 如何獲取是紅寶石寶石的代碼?
- 8. 從外部的紅寶石安裝獲取寶石版本
- 9. 如何:獲取通過PayPal紅寶石寶石
- 10. 紅寶石獲取'輸入密鑰'
- 11. 使用紅寶石「獲取」塊
- 12. 紅寶石:獲取值,如果真或
- 13. 獲取參數裏面的紅寶石
- 14. 紅寶石 - 獲取鼠標座標
- 15. 紅寶石:獲取光纖父母
- 16. 紅寶石 - 「獲取」增加換行符
- 17. 鏡像終端與獲取紅寶石
- 18. 紅寶石散列在紅寶石
- 19. 紅寶石寶石文檔
- 20. 寶石安裝紅寶石
- 21. 調試寶石紅寶石
- 22. 紅寶石程序寶石
- 23. 錯誤紅寶石寶石
- 24. Twitter的紅寶石寶石
- 25. 卸載紅寶石寶石
- 26. 紅寶石寶石 - LoadError
- 27. 紅寶石寶石LoadError
- 28. 安裝紅寶石寶石
- 29. 如何獲得紅寶石2.0模塊#prepend在紅寶石1.8?
- 30. 紅寶石:捕獲輸出
嗨 - 抱歉大量垃圾郵件,但http://area51.stackexchange.com/proposals/74083/korean-語言可以使用你,如果你不在那裏! – 2016-05-23 18:39:16