>>597のページを見て知ったのだが、
なんか re.compile してできるオブジェクト(_sre.SRE_Match object)のmatch()には、
第2引数でマッチ開始場所を指定できるみたい。

>>> pattern = re.compile(r'¥d+')
>>> pattern.match(r'foo123bar') # not matched
>>> pattern.match(r'foo123bar', 3) # matched
<_sre.SRE_Match object at 0x742100>

re.match()とはちがうんだな。
re.match(rexp, string)とre.compile(rexp).match(string)は同じものだと思ってたけど
実は仕様が微妙に違うのね。

とりあえずこれで strscan.rb 相当のものがかけそうです。
>>597さんくすです。