Python >> Tutoriel Python >  >> Python Tag >> RegEx

RegEx pour faire correspondre tous les caractères sauf certains caractères spéciaux et :)

C'est une question délicate, car vous souhaitez supprimer tous les symboles à l'exception d'une certaine liste blanche. De plus, certains des symboles de la liste blanche sont en fait composés de deux caractères :

:)
:(

Pour gérer cela, nous pouvons d'abord épargner les deux deux-points : et les parenthèses, puis supprimez l'un ou l'autre de manière sélective s'il ne fait pas partie d'un smiley ou d'un visage froncé :

input = "this is, a (placeholder text). I wanna remove symbols like: ! and ? but keep @ & # & :)"
output = re.sub(r'[^\w\s:()@&#]|:(?![()])|(?<!:)[()]', '', input)
print(output)

this is a placeholder text I wanna remove symbols like  and  but keep @ & # & :)

La classe de caractères regex que j'ai utilisée était :

[^\w\s:()@&#]

Cela correspondra à tout caractère qui n'est pas un mot ou un caractère d'espacement. Il épargne également votre liste blanche du remplacement. Dans les deux autres parties de l'alternance, nous supprimons ensuite cette logique, en supprimant les deux-points et les parenthèses s'ils ne le sont pas faire partie d'un visage souriant.


Comme d'autres l'ont montré, il est possible d'écrire une expression régulière qui réussira la façon dont vous avez formulé le problème. Mais c'est un cas où il est beaucoup plus simple d'écrire une regex pour correspondre à ce que vous voulez conserver . Ensuite, joignez simplement ces parties ensemble.

import re

rgx = re.compile(r'\w|\s|@|&