Also,
The first case: At least one letter (uppercase or lowercase) and At least one number
((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9]).{8,32}
The result:

The second case: At least one letter (uppercase or lowercase) and At least one special character
((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}

The third case: At least one number and At least one special character
(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}

Now that the three previous cases have been merged, the pattern will become:
(((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9])).{8,32}|((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}|(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}
This is the result you want:

Explanation:
The part : (((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9])).{8,32}
(?=.*[A-Z])|(?=.*[a-z])
: letters (uppercase or lowercase)
(?=.*[0-9]))
: Number
{8,32}
8 to 32 characters
The part : ((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}
(?=.*[A-Z])|(?=.*[a-z])
: letters (uppercase or lowercase)
(?=.*[@#$%^&+=])
: special characters
{8,32}
8 to 32 characters
The part : (?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}
(?=.*[0-9]))
: Number
(?=.*[@#$%^&+=])
: special characters
{8,32}
8 to 32 characters
This is a simple code to testing the pattern:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
// Passwords
String[] passwords = new String[8];
passwords[0] = "ABCabc123"; // letters (uppercase or lowercase) and numbers : VALID
passwords[1] = "*+uu*+aa"; // letters (uppercase or lowercase) and special characters : VALID
passwords[2] = "123+*$0*"; // numbers and special characters : VALID
passwords[3] = "ABCabc123*$#"; // letters (uppercase or lowercase) and numbers and special characters : VALID
passwords[4] = "ABCDabcd"; // letters (uppercase and lowercase) : INVALID
passwords[5] = "abcdefg"; // letters (lowercase) : INVALID
passwords[6] = "ABCDEFGH"; // letters (uppercase) : INVALID
passwords[7] = "123456789"; // numbers : INVALID
// Password validation pattern
var Validation = new Regex(@"((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9]).{8,32}|((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}|(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}");
// Validat the passwords
for (int i = 0; i < passwords.Length; i++){
var isValidated = Validation.IsMatch(passwords[i]);
Console.WriteLine(isValidated);
}
}
}
The result:

If you want to validate the password according to the conditions separately, I've defined 3 patterns, compatible with the conditions you want:
1- hasLetterAndNumber
2- hasLetterAndCharacter
3- hasNumberAndCharacter
Passwords will be validated, which correspond to one of the preceding conditions:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
// Passwords
String[] passwords = new String[8];
passwords[0] = "ABCabc123"; // letters (uppercase or lowercase) and numbers : VALID
passwords[1] = "*+uu*+aa"; // letters (uppercase or lowercase) and special characters : VALID
passwords[2] = "123+*$0*"; // numbers and special characters : VALID
passwords[3] = "ABCabc123*$#"; // letters (uppercase or lowercase) and numbers and special characters : VALID
passwords[4] = "ABCDabcd"; // letters (uppercase and lowercase) : INVALID
passwords[5] = "abcdefg"; // letters (lowercase) : INVALID
passwords[6] = "ABCDEFGH"; // letters (uppercase) : INVALID
passwords[7] = "123456789"; // numbers : INVALID
// Password validation pattern
var hasLetterAndNumber = new Regex(@"((?=.*[A-Z])|(?=.*[a-z]))(?=.*[0-9]).{8,32}");
var hasLetterAndCharacter = new Regex(@"((?=.*[A-Z])|(?=.*[a-z]))(?=.*[@#$%^&+=]).{8,32}");
var hasNumberAndCharacter = new Regex(@"(?=.*[0-9])(?=.*[@#$%^&+=]).{8,32}");
// Validat the passwords
for (int i = 0; i < passwords.Length; i++){
if((hasLetterAndNumber.IsMatch(passwords[i])) || (hasLetterAndCharacter.IsMatch(passwords[i])) || (hasNumberAndCharacter.IsMatch(passwords[i]))){
Console.WriteLine(passwords[i]);
Console.WriteLine("\n");
}
}
}
}
