You can make use of this:
^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d][A-Za-z\d!@#$%^&*()_+]{7,19}$
-
[A-Za-z\d] Ensures that the first character is an alphabet or digit.
-
[A-Za-z\d!@#$%^&*()_+]{7,19} will match minimum 7 maximum 19 character. This is required as he presceding character class would consume a single character making the total number of characters in the string as minimum 8 and maximum 20.
-
$ Anchors the regex at the end of the string. Ensures that there is nothing following our valid password