> You don't need character classes for single characters:
>   Set = /\[[1-9]\d\]/
>   Field = /FS?[1-9]\d*/
Makes for slightly better looking expressions.  I thought this was the
case, but didn't bother to check.

> How about:
>   SetThenField = /#{Set}(\s)*#{Field}\s/
> (This is all untested but it might point you in a helpful direction.)
Seems to work actually.  I had found an old groups post about using #{}
within regular expressions but didn't bother to try it because of the
way they had explained it.

irb(main):009:0> re1 = /[\w]+/
=> /[\w]+/
irb(main):010:0> re2 = /[\d]+/
=> /[\d]+/
irb(main):017:0> "Foo 123".match(/#{re1}[\s]+#{re2}/).to_s
=> "Foo 123"

Thanks,
- Geoff