0
votes

Deux conditions dans des expressions régulières avec python

Je ne comprends pas pourquoi le premier élément de ma sortie est vide et non "@stackoverflow" xxx

sortie: xxx


0 commentaires

4 Réponses :


0
votes

Parce qu'il l'utilise comme "@" ou "# (\ w +)" . Essayez: XXX


0 commentaires

0
votes

Parce que votre regex est interprété comme [correspondant juste @ ou # avec quelques \ w après cela et capturez uniquement le < Code> \ w s], vous pouvez utiliser cette regex à la place pour obtenir les deux symboles avec ce qui est après eux: xxx

sortie: xxx


0 commentaires

0
votes

C'est parce que le modèle @ | # (\ w +) correspond le motif:

@

ou

# (\ w +)

et quand il correspond au premier côté du | , le motif ne capture rien.

Vous pouvez résoudre ce problème en utilisant le modèle [@ #] (\ w +) .


0 commentaires

1
votes

C'est parce que r "@ | # (\ w +)" est identique que r "(?: @) | (?: # (\ w +))" , de sorte que votre regex recherche soit un symbole de hachage suivi de quelque chose ou d'un symbole "à" seul .

Votre code renvoie exactement ce qui est attendu:

  • La première partie de la regex n'a pas de groupes de capture, il correspond donc à la "@" et retourne une chaîne vide.
  • La deuxième partie a un groupe de correspondance et retourne que

    correspond à "Stackoverflow" dans "@stackoverflow", essayez ceci: xxx

    Ceci est identique à la spécification de la priorité explicitement: xxx

    "(?: @ | #) (\ w +)" signifie: * Faites correspondre soit «@» ou «#», mais ne le capturez pas * Si la correspondance ci-dessus, correspondez (\ w +) et capturez le résultat, car (...) est un groupe de capture

    dans le contexte de re.findall , seuls les groupes de capture apparaîtront dans la liste résultante.


0 commentaires