2011-10-27 6 views
1

J'essaye de dépouiller une chaîne de tous les caractères spéciaux sauf quelques-uns, plus tout enlever entre parenthèses (le carré, ou tout autre, y compris les parenthèses!). Mon regex actuelle est:Regex pour l'exclusion des caractères

^[a-zA-Z0-9äöüÄÖÜ;@.]*$ 
\\[.+\\] 
\\<.+\\> 
\\s+ 

Toutes les séquences qui correspondent à l'un des ci-dessus sont retirés Il fonctionne très bien sur, par exemple:

Foo Bar[[email protected]] 

réduisant trop FooBar mais pas par exemple:

Foo 
[email protected] 

en les enlevant complètement

+0

Cette regex ne fait pas ce que vous prétendez faire. S'il vous plaît montrer un certain code/données. –

+0

Quel doit être le résultat pour le second exemple? – Toto

Répondre

1

Mise à jour: Mise à jour de l'expression régulière conformément à la modification de l'OP.

Vous pouvez utiliser l'expression rationnelle suivante et remplacer la correspondance par une chaîne vide.

\[.*?\]|<.*?>|\s|[^a-zA-Z0-9äöüÄÖÜ;@.] 
+0

Hé j'ai édité mes questions, pourriez-vous jeter un coup d'œil? – Freek8

+0

@ Freek8 mis à jour la réponse, pour la négation des caractères, vous devez garder '^' dans le jeu de caractères et non en dehors de celui-ci comme vous le faites actuellement. '^' en dehors du jeu de caractères indique le début de l'ancre de ligne. –

+0

Merci Narendra qui était en effet le problème (voir mon commentaire sur la réponse de lkuty) – Freek8

1

Pour enlever tout chose entre parenthèses, sauf entre parenthèses, vous pouvez utiliser l'expression rationnelle suivante et le remplacer par une chaîne vide:

/\[[^\]]*\]/ 

Pour supprimer des caractères spéciaux, vous pouvez utiliser celui ci-dessous. Il sélectionne tout sauf ce qui se trouve entre les parenthèses. Vous pouvez donc le remplacer une fois de plus par la chaîne vide.

/[^a-zA-Z0-9äöüÄÖÜ;@]/ 

Vous pouvez les utiliser en séquence ou en construire un plus grand.

Dans Ruby, je le test suivant:

irb(main):001:0> s = "Foo Bar[[email protected]]" 
=> "Foo Bar[[email protected]]" 
irb(main):005:0* s.gsub(/\[[^\]]*\]|[^a-zA-Z0-9äöüÄÖÜ;@]/, "") 
=> "FooBar" 

Notez que l'espace a disparu.

+0

Je pense que je l'ai fixé maintenant à l'aide: [. + \\] \\ \\ <.+\\> [.^A-zA-Z0-9äöüÄÖÜ; @] \\ s + Je pense que le problème était le^En dehors de la [] – Freek8

Questions connexes