Between "Dynamic Routes" and "Dialplan Injection" you can achieve what you want.
Here's some info on both
https://randomcontributions.blogspot.com/2020/02/asterisk-dynamic-routes.html
https://randomcontributions.blogspot.com/2020/03/dialplan-injection-asterisk.html
Here's an example that should work for you, or at least can be modified.
Refer to the above links that discuss how to create the modules.
1>
Make a dynamicRoutes entry called "CallerIDDecision"
Set it to Sourcetype of "ASTERISK VARIABLE"
in "VARIBAL STRING" put in
${RouteDecision}
Under the "MATCH" section
"DEFAULT DESTINATION" will be where you want calls to goto if there is no match. This is a failsafe in case none of the matches work, this will where calls fall to.
My example will be to match 2 entries, but you can have as many as you want.
Beneath that entry, there is an empty box. Put in
"ROUTE1" in the box, then set an entry for that (ie 91XXXXXX calls) will goto.
Repeat for "ROUTE2" for a destination for that. (ie 93XXXXXX calls) will goto
Now save those changes.
2>
now go to "DIALPLAN INJECTION"
Create a dialplan called "CallDecision"
(you'll need to click on "SUBMIT" then click on that name that will appear on the right to do the next step)
in the COMMANDS box put this in:
ExecIf($["${REGEX("^91." ${CALLERID(num)})}" = "1"]?Set(RouteDecision=ROUTE1))
ExecIf($["${REGEX("^93." ${CALLERID(num)})}" = "1"]?Set(RouteDecision=ROUTE2))
You can repeat the above entries, but just modify them.
===========================================
Heres how the above command works:
the portion 91. in the above code means "any number starting with 91 regardless of number of numbers after"
Then at the end we set a variable, in this case calls starting with 91 are set as "ROUTE1" and calls that start with 93 are set to "ROUTE2". I'm using "ROUTEX" as the variable name, but you can change this to be whatever you wish. Its for example purposes.
Just set your "REGEX" value to its own variable, "ROUTE3" "ROUTE4" etc, and add those values into the dynamic routes module. You just repeat the code as you need. Below are some examples. in this one, calls that start with 554 and 34 both go to ROUTE4
ExecIf($["${REGEX("^74." ${CALLERID(num)})}" = "1"]?Set(RouteDecision=ROUTE3))
ExecIf($["${REGEX("^554." ${CALLERID(num)})}" = "1"]?Set(RouteDecision=ROUTE4))
ExecIf($["${REGEX("^124." ${CALLERID(num)})}" = "1"]?Set(RouteDecision=ROUTE5))
ExecIf($["${REGEX("^34." ${CALLERID(num)})}" = "1"]?Set(RouteDecision=ROUTE4))
===========================================
Now in "DESTINATION"
select "DYNAMIC ROUTES" and "CallerIDDecision"
Save and submit changes
3>
Now, on your inbound routes you point it to "DIALPLAN INJECTION - CallerIDDecision" and then it will start routing based on these values
I would caution you testing this in production please. The code is an example and might not work exactly as described above in your case, some tweaks might need to be done.