Not sure if this has been asked before, please point me to the post if it has.

Is there a way to treat terms like `(b+c)`, `a**(b+c)`, `(b+c)**d` and `a**(b+c)**d` together? By that I mean, is there a pattern like `a_(Something or nothing)**(b_+c_)**d_(Something or nothing)` and which allows for distributivity to be defined as something like
```
NCExpand[a_(Something or nothing)**(b_+c_)**d_(Something or nothing)]:= a**b**d+a**c**d
```
where for the case where `a` or `d` is not present they are not present in the expanded version.

**Edit**

Based on what is said in the comments I've done
[![][1]][1]


  [1]: https://i.sstatic.net/EEIx1.png

But as can be seen from the output it doesn't work when the head is not `NonCommutativeMultiply`. I would like to be able to include it in the same definition.