buenas,
a mi la expresion me funciona. sin embargo, una observacion. ¿el RFC tiene que estar compuesto exactamente de cuatro caracteres, seis numeros, y seguido tres caracteres alfanumericos? porque si es asi, la expresion estaria mal escrita ya que esta admite un numerio variable en cada una de las partes del string. si tiene que ser exactamente dicha cantidad, entonces en el repetidor no debes incluir un rango, sino un numero fijo.
{min,max} = desde un minimo a un maximo
{fixed} = cantidad exacta
por otro lado, no veo la razon para incluir
(?!\s) en la expresion. de hecho, lo que estas haciendo es complicar la lectura y comprehension de la expresion.