It's complex - but possible:
^.*(?=.{8,10})(?=.*[!"£$%^&*()_])(?=.*[a-zA-Z]).*$
The characters between the '[' and ']' are the permitted special characters. To be honest, I wouldn't use a regex for this - I'd do it in code, it's a lot more maintainable.