2010-10-22 6 views
1

En python, j'ai une chaîne commePython: Une aide d'expression régulière

ABC(a =2,bc=2, asdf_3 = None) 

En utilisant l'expression régulière, je veux le faire comme

ABC(a =2,bc=2) 

Je veux supprimer le paramètre celui nommé 'asdf_3', c'est tout!

Mise à jour: Les paramètres peuvent être nombreux, seul asdf_3 est le même dans tous les cas, la commande est généralement la dernière.

+1

Qu'avez-vous appris d'ici: http://stackoverflow.com/questions/3988632/python-use-regular-expression-to-remove-something – ghostdog74

+0

Veuillez oublier les expressions régulières. –

Répondre

0
import re 

foo = 'ABC(a =2,bc=2, asdf_3 = None)' 
bar = re.sub(r',?\s+asdf_3\s+=\s+[^,)]+', '', foo) 

# bar is now 'ABC(a =2,bc=2,)' 

Les \s+ parties vous permettent de faire correspondre une quantité d'espaces, et la partie [^,)]+ laisse pratiquement tout sur la droite qui ne démarre pas un autre argument.

+0

Je dois me débarrasser de la barre commune après = 2 aussi bien. – user483144

+0

C'est ce que le ',?' Au début du motif est pour. – Amber

0

vous faites vos devoirs non? Montrez un peu d'effort de votre part la prochaine fois, depuis que vous avez déjà posé des questions comme this

>>> foo.split("asdf_3")[0].strip(", ")+")" 
'ABC(a =2,bc=2)' 

>>> re.sub(",*\s+asdf_3.*",")",foo) 
'ABC(a =2,bc=2)' 
0

Puisque vous dites que le paramètre asdf_3 est seulement généralement le dernier, je suggère ce qui suit:

result = re.sub(
    r"""(?x) # verbose regex 
    ,?  # match a comma, if present 
    \s*  # match spaces, if present 
    asdf_3 # match asdf_3 
    [^,)]* # match any number of characters except) or , 
    """, "", subject) 

Cela suppose que les virgules ne peuvent pas faire partie de l'argument après asdf_3, e. g. comme asdf_3 = "foo, bar".