well.. FWIW that was checking for 3 colons or more, not exactly
3.
After a couple of "sorry Claude, it still fails", finally it gave
me this, which appears OK
regexp("^((?!T1).)*T1((?!T1).)*T1((?!T1).)*$", DESIRED_SITES)
i.e. sort of like "^.*T1.*T1.*$" but with the constrain that
those ".*" does not contain (T1), IIUC.
OTOH, Claude gave me this Example in HTCondor ClassAd context:
regexp("^([^:]*:){3}[^:]*$", SomeAttribute) # Exactly 3 colons in the string