My url is:

http://www.domain.com/Seattle_WA_math

It must indicate:

http://www.domain.com/list.php?city=Seattle&state=WA&s=math

This is what I've to date, does not work...

RewriteRule ^[A-Za-z_\-]+_[A-Z]{2}_[A-Za-z0-9_\-\(\)]+\/$ list.php?city=$1&state=$2&$s=$3 [L]

I'm typing this quickly however it should work.

RewriteRule ^([a-zA-Z-]+)([A-Z])([a-zA-Z0-9_-]+)$ list.php?city=$1&state=$2&lifiers=$3

The ( ) designate the $# variables ultimately part so exactly what matches should fall into line.

Do this inside your .htaccess file:

RewriteEngine on
Options +FollowSymlinks -MultiViews
RewriteRule ^([A-Za-z-]+(?:_[A-Za-z-]+)*)_([A-Z]{2})_([A-Za-z0-9_-]+)/?$ /list.php?city=$1&state=$2&s=$3 [R,L,QSA,NE]

R=301 will redirect with https status 301
L can make last rule
NE is perfect for no getting away query string
QSA will append your overall query parameters

$1, $2 and $3 are groups inside your REQUEST_URI

This will get it done:

RewriteRule ^([A-Za-z\-]+(?:_[A-Za-z\-]+)*)_([A-Z]{2})_([A-Za-z0-9_\-\(\)]+)\/?$ list.php?city=$1&state=$2&$s=$3 [L]

Enables multiple phrased citys and subjects and optional trailing / path.

RewriteEngine On
RewriteRule ^([^_]+)_([^_]+)_(.+)$ yourscript.php?city=$1&state=$2&s=$3 [L]

Simple, right?