There is a very complex regular expression.

But I have a problem with it. The `#` and `++` characters are removed if there are letters after them.

**Question**: How to add an exception to current regex for (C++ and C# tokens)?

I've used the next regex:

```
import re

text = 'Must-have skills: -.Net programming experience; -2 years experience in C++; C#/.Net, C++/.Net, C./.Net.'
text = re.sub(r'[!,.:;—](?= |$)', ' ', text)
print(re.sub(r'(?i)(?:(?!\.net\b|\b-\b)[^\w\s])+(?=[^\w\s]*\b)', ' ', text))

```

And I've had the next result:

```
'Must-have skills   .Net programming experience   2 years experience in C++  C .Net  C .Net  C .Net '

```

**Desired result:**

```
'Must-have skills   .Net programming experience   2 years experience in C++  C# .Net  C++ .Net  C .Net '

```

**Current regex details**

* `(?i)` - case insensitive mode on
* `(?:(?!\.net\b|\b-\b)[^\w\s])+` - any punctuation char (`[^\w\s]`), 1 or more occurrences, as many as possible, that does not start any of the sequences:
	+ `\.net\b` - `.net` as whole word
	+ `|` - or
	+ `\b-\b` - a hyphen enclosed with word chars
* `(?=[^\w\s]*\b)` - a positive lookahead that requires 0+ punctuation chars followed with a word boundary position immediately to the right of the current location.