2012-12-12 4 views
1

J'ai essayé de faire correspondre quelque chose comme çaparenthèses match avec Python

mystring = "kdjf4kf., kfg. (KFJG)" 
regex = r'.+\(\w+\)' 

Mais il ne fonctionne pas, il ne trouve rien. Je voudrais extrapoler KFJG. Comment puis-je le faire?

Exemple:

>>> a = "Amazon (AMZN)" 
>>> regex = '.?(\w+)' 
>>> match = re.match(regex, a) 
>>> match.group(0) 
'Amazon' 
>>> match.group(1) 
'mazon' 
+0

Veuillez montrer un exemple complet d'utilisation et de sortie inattendue. (Trouver la solution à un problème est un processus.) –

Répondre

4

Parce que vous avez oublié d'inclure le match dans un capturing group

>>> re.findall(r'.+\((\w+)\)', mystring) 
['KFJG'] 
1
>>> regex = '.?(\w+)' 

.? -> cela signifie qu'il peut y avoir un caractère/nombre (\ w +) -> cela signifie que la capture d'un personnage jusqu'à l'espace se produit

match.group(0) retournera chaîne que vous voulez faire correspondre, c'est pourquoi vous voyez « Amazon »

match.group(1) retournera première parenthèse contenu groupé identifié dans la chaîne,

'.?(\w+)' signifie que correspondant à une chaîne (mazon) qui peut y avoir un caractère (a) devant lui.

votre parenthèse dans votre code a une autre signification dans regex, ce qui signifie Grouper le contenu pour un usage ultérieur et ne pas servir de modèle correspondant ici.

ce que vous voulez vraiment est de capturer le contenu dans une parenthèse et la parenthèse doit être échappé à régulièrement par mettre un « \ »

>>> regex = '.*\((\w+)\)' 
>>> match = re.match(regex, a) 
>>> match.group(0) 
'Amazon (AMZN)' 
>>> match.group(1) 
'AMZN' 

'.*\((\w+)\)' rompons dans le détail

... \(_____\) -> cela signifie correspondre une parenthèse

..... (___) -> cela signifie groupe à l'intérieur du contenu pour match.group (1)

....... \ w + -> cela signifie correspondre à un ou plusieurs caractères

Questions connexes