You cannot put words in a character class. All characters there will be added to this class, the order does not matter.
I'm not sure if this is enough for you, but for your example, this will work:
(?<=\w)[^a-zA-Z0-9*:()\s]+(?=\w)
and replace with one space.
I would add that this is even more Unicode style:
(?<=\w)[^\p{L}0-9*:()\s]+(?=\w)
Where \p{L} is the Unicode property for a letter in any language.
See here at Regexr
Update:
If you want to keep the colon, if there is a "Category" before you can do it like this
(?<=\w)(?:[^a-zA-Z0-9*()\s:]+|(?<!Category):)(?=\w)
Watch it at Regexr
I added a colon to the negative character class to say do not replace the colon. Then I added an alternative to say: replace the colon, but only if there was no category before.
source share