Je veux supprimer quelque chose comme (Q.5) ou (5.) ou (Question5). J'ai le modèle regex pour cela, mais le fait est qu'il supprime également les éléments en dehors des crochets.

J'ai utilisé \((\S+)\)|((\s|\n)\S\s*\.\s*) mais il convertit

(d)  Q 2.3 5.6 hello. J.E.E (Q.4)  (Q4) (Q4.)

À

Q 3 6 hello. E.E

Mais le résultat que j'attends est

Q 2.3 5.6 hello. J.E.E
1
Deshwal 13 nov. 2020 à 09:38

1 réponse

Meilleure réponse

En supposant que vos (...) soient équilibrés et sans échappement, vous pouvez utiliser cette expression régulière avec une classe de caractère négative pour la recherche :

\s*\([^)\s]*\)\s*

Et remplacer par une chaîne vide.

Code:

>>> import re
>>> s = '(d)  Q 2.3 5.6 hello. J.E.E (Q.4)  (Q4) (Q4.)'
>>> print (re.sub(r'\s*\([^)\s]*\)\s*', '', s))
Q 2.3 5.6 hello. J.E.E

Démo RegEx

Détails RegEx:

  • \s*: correspondre à 0 ou plusieurs espaces blancs
  • \(: ouverture du match (
  • [^)\s]* : classe de caractères négative pour correspondre à 0 ou plus de tout caractère qui n'est pas ) et non un espace blanc
  • \): clôture du match )
  • \s*: correspondre à 0 ou plusieurs espaces blancs
2
anubhava 13 nov. 2020 à 06:46