Как лучше всего сопоставить все знаки препинания в классе [[:punct:]], кроме @ и #?
[[:punct:]]
@
#
Вы можете использовать отрицательный прогноз:
(?:(?![#\@])[[:punct:]])+
[[:punct:]] эквивалентно [!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]
[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]
См .: http://www.regular -expressions.info / posixbrackets.html
Вы можете просто извлечь ненужные символы: [!"$%&'()*+,-./:;<=>?[\]^_`{|}~]
[!"$%&'()*+,-./:;<=>?[\]^_`{|}~]