A CLR or Regular Expressions is not needed for something like this. Problems like this are exactly that NGrams8K was designed to solve. First for a crash course on NGrams8K.
This:
DECLARE @string VARCHAR(100) = 'ABC123XYZ'
SELECT ng.position, ng.token
FROM dbo.NGrams8k(@string, 7) AS ng;
Returns:
position token
--------- -----------
1 ABC123X
2 BC123XY
3 C123XYZ
To identify a chunk of letters (AKA a substring or, in the context of N-Grams, a 7-gram) that (1) begin with a letter, includes at least one number and contains no lower case letters you could use NGrams8K like so:
DECLARE @string VARCHAR(100) = 'x96AE0E33CFD5';
SELECT ng.position, ng.token
FROM dbo.ngrams8k(@string,7) AS ng
CROSS APPLY (VALUES(ng.token COLLATE latin1_general_bin2)) AS token(cs)
WHERE token.cs LIKE '[A-Z]%[0-9]%'
AND token.cs NOT LIKE '%[a-z]%';
which returns:
position token
---------- ---------------
4 AE0E33C
5 E0E33CF
7 E33CFD5
As you can see, we've extracted every 7-character substring that matches your requirements. Alternatively, this will be a wee-bit more efficient:
SELECT ng.position, ng.token
FROM dbo.ngrams8k(@string,7) AS ng
WHERE (ASCII(LEFT(ng.token,1)) - 65) & 0x7FFF < 26
AND PATINDEX('%[a-z]%',ng.token COLLATE latin1_general_bin2) = 0;
To better understand what's going on consider this query:
DECLARE @string VARCHAR(100) = 'x96AE0E33CFD5';
SELECT ng.position,
ng.token,
isMatch = CASE WHEN token.cs LIKE '[A-Z]%[0-9]%'
AND token.cs NOT LIKE '%[a-z]%' THEN 1 ELSE 0 END
FROM dbo.ngrams8k(@string,7) AS ng
CROSS APPLY (VALUES(ng.token COLLATE latin1_general_bin2)) AS token(cs);
which returns:
position token isMatch
---------- ---------- ---------
1 x96AE0E 0
2 96AE0E3 0
3 6AE0E33 0
4 AE0E33C 1
5 E0E33CF 1
6 0E33CFD 0
7 E33CFD5 1
Here's an example against a table where you only want to return rows that match your criteria:
DECLARE @table TABLE (someId INT IDENTITY, string VARCHAR(100));
INSERT @table(string) VALUES ('!!!!AB1234567'),('c555'),('!!ABC1234ggg')
SELECT t.someId, t.string
FROM @table AS t
WHERE EXISTS
(
SELECT 1
FROM dbo.ngrams8k(t.string,7) AS ng
WHERE (ASCII(LEFT(ng.token,1)) - 65) & 0x7FFF < 26
AND PATINDEX('%[a-z]%',ng.token COLLATE latin1_general_bin2) = 0
);