in reply to simplifying an expression

You could do...
/<TR[^>]*>\s*(?:<[^>]*>|\s+)+([^<]+)(?:<[^>]*>|\s+)+([^<]+)/;
I tested it, it works... here's a breakdown.
<TR[^>]*>\s* match a TR tag, followed by 0 or more whitespace.
(?:<[^>]*>|\s+)+ Match as much tagged data or whitespace as possible, basically just keep going till you run out of tagged data or whitespace. the \s+ is important, I believe \s* would result in a very slow regexp. ?: means don't save data from this grouping in $1
([^<]+) Matches everything till the next tag starts.
Then it just repeats the anytag match, and the non-tag text match.

This will work for this case, however you may need some code in there to make sure you don't get data from other TDs... maybe check for mrktdata1 or something else that is unique to these TDs. Currency is in $1, rate is in $2. enjoy.
                - Ant