2017-09-03 15 views
0

Je cherche une expression régulière qui remplacera les parenthèses et les chaînes qui s'y trouvent si la chaîne tout ce qui n'est pas un chiffre.Expression régulière pour remplacer les parenthèses de contenu et leur contenu

La chaîne peut être une combinaison de caractères, y compris des chiffres, des lettres, des espaces etc.

Par exemple:

(3) ne sera pas remplacé

(1234) ne sera pas

remplacé

(quelques lettres) seront remplacés

(quelques lettres, des espaces - un nd numéros 123) seront remplacés

Jusqu'à présent, j'ai un regex qui remplacera les parenthèses et son contenu

str = str.replaceAll("\\(.*?\\)",""); 

Répondre

1

Je ne suis pas bon avec la syntaxe de replaceAll, donc je vais juste écris comme tu l'as écrit. Mais je pense que je peux vous aider avec l'expression rationnelle.

Essayez cette Regex:

Demo

ou une encore meilleure:

\((?!\d+\))[^)]+?\) 

Demo

Explication (pour le 1er Regex)

  • \( - Autorise ouverture parenthèse
  • (?=[^)]*[a-zA-Z ]) - Positif Lookahead - vérifie 0 ou plusieurs caractères qui ne sont pas ) suivi d'un espace ou une lettre
  • [^)]+? - Capture 1 ou plusieurs caractères qui sont pas )
  • \) - matchs Enfin, la fermeture parenthèse

Explication (pour 2 Regex)

  • \( - correspond à l'ouverture de parenthèse
  • (?!\d+\)) - Lookahead négatif - correspond uniquement aux chaînes qui n'ont pas tous les caractères que des chiffres après la parenthèse d'ouverture, mais avant la parenthèse de fermeture apparaît
  • [^)]+? - Capture 1 ou plusieurs caractères qui ne sont pas )
  • \) - Matches Enfin, la fermeture
  • les parenthèses

Maintenant, vous pouvez remplacer votre déclaration:

str = str.replaceAll("\((?=[^)]*[a-zA-Z ])[^)]+?\)",""); 

OU

str = str.replaceAll("\((?!\d+\))[^)]+?\)","");