First, let's shorten your RegEx:
(?<!([A-Za-z0-9])) -> lookbehind not being a letter or number
(?!([A-Za-z0-9]))(\)?) -> look ahead not being letter or number
these are so common there is a RegEx feature for them: Word boundaries \b. They have zero width like lookarounds and only match if there is no alphanumeric character.
Your RegEx then becomes \b[A-Z][a-z]\b; looking at this RegEx (and your examples), it appears you want to match certain element abbreviations?
Now you can simply use a lookbehind:
\b[A-Z][a-z](?<!Cr|Pb)\b
to assert that the element is neither Chrome nor Lead.
Just for fun:
Alternatively, if you want a less readable (but more portable) RegEx that makes do with fewer advanced RegEx features (not every engine supports lookaround), you can use character sets as per the following observations:
- If the first letter is not a
C or P, the second letter may be any lowercase letter;
- If the first letter is a
C, the second letter may not be an r
- If the first letter is a
P, the second letter may not be an b
Using character sets, this gives us:
[ABD-OQ-Z][a-z]
C[a-qs-z]
P[ac-z]
Operator precedence works as expected here: Concatenation (implicit) has higher precendence than alteration (|). This makes the RegEx [ABD-OQ-Z][a-z]|C[a-qs-z]|P[ac-z]. Wrapping this in word boundaries using a group gives us \b([ABD-OQ-Z][a-z]|C[a-qs-z]|P[ac-z])\b.