Java Regex complex ID expression filtering

I am using Java to implement PDF to plain text conversion. Right now I am facing the problem of filtering out ID expressions from String representation of the text.

The idea here is to capture IDs as whole words of length only greater than 3 and remove them. IDs must comprise of both letters and numbers at the same time, in any order. They can have optional special symbols like :.- and are generally all uppercase except several cases when there might be one and (for now) exactly one lowercase letter in them. IDs can be encountered at any place in the sentence, and there are multiple sentences inside the String. I am also trying to capture the preceding space (if there is one) so there is no double space after I remove the ID. It is acceptable to split the expression into several pieces if it gets too complex.

I’ve created a small test snippet to show exactly what needs and doesn’t need to be caught by the regular expression, as well as display my progress so far. I am using standard java.util.regex package for implementation.

  String testString = "Remove this (ACTDIK002), ACTDIK002, (L1:3.CI), 9-12.CT.d.12, and 1A-CS-01 " 
        + "but not (DLCS), 781-338-3000, (DTC), (200), K-12, K or 12. " 
        + "Also not (), A.I., AI, A or a. . ...";
  System.out.println(testString);
  String regex = "[\s]{0,1}[[A-Z]+[\d]+[-:\(\)\.]*]{4,}[a-z]{0,1}[\d\.]*";
  //"[\s]{0,1}[[A-Z]+[\d]+[-:\(\)\.]*]{4,}[[a-z]{0,1}[\d\.]+]*" //for comma removal
  Pattern pattern = Pattern.compile(regex);
  Matcher matcher = pattern.matcher(testString);
  testString = matcher.replaceAll("*");
  System.out.println(testString);

It may be necessary to remove IDs together with their commas, so it would be great if the revised expression was capable of capturing commas or omitting them via minor alterations like the alternative regex I’ve provided.

My current solution filters out everything that needs to be filtered but also most of the things it shouldn’t. It appears the rule that there must be at least one capital letter and one digit in the word isn’t working, possibly because I need to use Lookahead/Lookbehind/Grouping, sadly none of which I managed to get to work properly. I also suspect the use of [] is completely incorrect in my example, but this is the only way I managed to get it to (mostly) work for now. Please help me.