Regular expressions aren't particularly good at ensuring that particular groups of characters appear a certain number of times. While it's probably possible - it would no doubt be convoluted and non-obvious.
If you're programming in .NET (C# or VB) you can use a simple validation function something like:
bool ValidatePasswordCompliance( string password )
{
int countDigits = 0;
int countAlpha = 0;
int countOthers = 0;
foreach( char c in password )
{
countDigit += c.IsDigit ? 1 : 0;
countAlpha += c.IsAlpha ? 1 : 0;
countOther += !(c.IsAlpha || c.IsDigit) ? 1 : 0;
}
return countDigits >= 3 && (countDigits + countAlpha + countOthers) >= 7;
}
If you're working with .NET 3.5 or higher, you could use LINQ to simplify this:
bool ValidatePasswordCompliance( string password )
{
return password.Count() >= 7 &&
password.Count( x => x.IsDigit ) >= 3;
}