With the -E flag that you are already using, the search is for a regular expression. You can include an expression so that grep will not find itself like this:-
ps -ef | grep -E "Hell[o]"
The [o] matches the single character o which seems illogical until you recognise that the grep process will therefore not match, so it excludes itself.
You have several options separated with pipes so you pick the row if you match any of the items so you will need to do this to each part.
Two more thoughts:-
You have a search pattern of a space. Is that really what you want? I would expect much more output if that were true.
Your sort -u seems in the wrong place. Perhaps this might be better:- text ps -eo comm= | grep -Eo "whateve[r]|somethin[g]|els[e]" | sort | uniq -c
I use -o comm= to strip out the headings.
You do end up with the output the other way round. Is that a problem?
If there are no instances of your required processes they won't be listed in ps and therefore won't be counted by uniq .
Perhaps something like this will help you:
for p in process1 process2 process3
do
printf "%s: %d\n" "$p" $(ps -e -o comm= | grep -F -c "$p")
done