I think you can use this expression to attain the splits you want. As strsplit
uses up the characters it splits on you will have to split on the spaces following the things to match for/not to match for (which is what you have in the desired output in your OP):
strsplit( text[[1]] , "(?<=and/ERT)\\s(?!then)|(?<=/\\$[[:punct:]])(?<!:/\\$[[:punct:]])\\s(?!Smiley)" , perl = TRUE )
#[[1]]
#[1] "This are faulty propositions one and/ERT"
#[2] "two ,/$,"
#[3] "which I want to split ./$."
#[4] "There are cases where I explicitly want and/ERT"
#[5] "some where I don't want to split ./$."
#[6] "For example :/$. when there is an and/ERT then I don't want to split ./$."
#[7] "This is also one case where I dont't want to split ./$. Smiley !/$."
#[8] "Thank you ./$!"
Explanation
(?<=and/ERT)\\s
- split on a space,\\s
that IS preceded,(?<=...)
by"and/ERT"
(?!then)
- BUT only if that space is NOT followed,(?!...)
by"then"
|
- OR operator to chain the next expression(?<=/\\$[[:punct:]])
- positive look-behind assertion for"/$"
followed by any letter of punctuation(?<!:/\\$[[:punct:]])\\s(?!Smiley)
- match a space that is NOT preceded by":/$"[[:punct:]]
(but according to the previous point IS preceded by"/$[[:punct:]]"
but NOT followed,(?!...)
by"Smiley"