2010-05-20 5 views
3

En RegEx, comment sélectionner tout ce qui n'est pas entre parenthèses:RegEx, sélectionnez tout ce qui n'est pas entre parenthèses

E.g.

Xxxxxxx (01010101) retournerait Xxxxxxx?

Merci!

+2

vous pouvez toujours * supprimer * tout ce qui correspond à '\ ([^)] + \)' –

+1

@David: '\\ ([^)] + \\)' est nécessaire - SO le formatage des commentaires a évidemment supprimé le barres obliques ... –

+0

@Smickie: S'il vous plaît fournir plus d'exemples. La question la plus importante est: Est-ce que les parens peuvent être imbriqués? Avec l'imbrication arbitraire comme 'Keep this (supprimer ceci (et ceci (et ceci aussi)))' une solution regex est impossible dans la plupart des implémentations regex. –

Répondre

2

Pour l'échantillon existant, cela va faire:

(.+) \(
1

Utilisez \([^)]*\) comme séparateur, soit dans split, ou un java.util.Scanner, etc, ou tout simplement l'utiliser pour remplacer par "".

En Java:

System.out.println(Arrays.toString(
     "abc(xyz)def(123)".split("\\([^)]*\\)")) 
    ); // prints "[abc, def]" 
    System.out.println(
     "abc(xyz)def(123)".replaceAll("\\([^)]*\\)", "") 
    ); // prints "abcdef" 
0

En Python:

import re 
def removeparens(inputstring): 
    return re.sub(r"\([^)]*\)", "", inputstring) 

fournira cette fonctionnalité sous la condition que parens ne sont jamais imbriquées.

Questions connexes