Re: [問題] Regexp 不方便的地方

看板Ruby作者 (godfat 真常)時間18年前 (2006/09/28 16:22), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《lg31cm (30處男)》之銘言: 其實我一直覺得 Ruby 的標準程式庫缺少滿多小功能的 不過所幸的是大部份都可以藉由隨手寫的小程式來解決… : 可能剛從 Python 轉過來沒多久,有些地方還不習慣,Ruby Regexp : 有一點蠻不好用的: : # Ruby : /\w/.match(str) : # Python : re.match(str, begin_pos, end_pos) : Ruby 似乎沒辦法指定搜尋的 range,當然這樣還是可以: : /\w/.match(str[begin_pos..end_pos]) : 不過這就不是我要的東西了,因為傳回來的 matched position : str[begin_pos..end_pos] 的子字串 matched position,而不是 : 原字串,有什麼好解決方案嗎? 剛剛隨手寫了這個,不知道能不能用 就只是簡單做位移運算而已 本來是想繼承 MatchData 來做的,不過不知道 MatchData 要怎麼 new @@ 所以就暫時寫成這樣了… class MatchRange def initialize regexp, str, first, last @match_data = regexp.match str[first...last] @first, @last = first, last end def begin index @match_data.begin(index) + @first end def end index @match_data.end(index) + @last end def offset index [self.begin(index), self.end(index)] end def method_missing msg, *arg @match_data.send msg, *arg end end class Regexp def match_range str, first, last MatchRange.new self, str, first, last end end 用法就變成: # Ruby /\w/.match_range(str, begin_pos, end_pos) 當然,還可以考慮配合 WanCW 板友的 Overload module :p : P.S Ruby 1.9 似乎要加入 begin_pos, 但是 end_pos 好像沒有? 記得有聽說 external iterator 的呼聲 不過詳細我不清楚,稍微看了一下 generator 似乎不能用 -- Nobody can take anything away from him. Nor can anyone give anything to him. What came from the sea, has returned to the sea. Chrono Cross -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.167.208

09/28 22:40, , 1F
thank you~
09/28 22:40, 1F
文章代碼(AID): #156uPG8O (Ruby)
討論串 (同標題文章)
文章代碼(AID): #156uPG8O (Ruby)