1
votes

Question très basique sur l'extraction de regex

J'ai besoin d'extraire un identifiant spécifié dans les URL qui ont cette structure:

[^https://trello.com/c/]\w+/

Match 1
Full match  21-30   iGjJLqwr/

dans l'exemple ci-dessus, je veux extraire:

iGjJLqwr

Je dois utiliser l'expression regex dans Zapier qui, selon la documentation, utilise Python regex

Le regex python suivant est en quelque sorte dans la bonne direction mais il renvoie toujours trop:

Match 1
Full match  21-29   iGjJLqwr
Match 2
Full match  31-36   -test
Match 3
Full match  36-44   -project

renvoie 3 correspondances:

[^https://trello.com/c/][\w]+

Je dois limiter le résultat à:

iGjJLqwr

L'expression régulière suivante renvoie une barre oblique supplémentaire

https://trello.com/c/iGjJLqwr/1-test-project


0 commentaires

3 Réponses :


0
votes

Cela correspondra à l'ID sans la barre oblique supplémentaire:

iGjJLqwr
import re

string = 'https://trello.com/c/iGjJLqwr/1-test-project'

match = re.search(r'[^https://trello.com/c/]\w*(?=/)', string)

print(match.group(0))

Le (? = /) affirme que le prochain le caractère est une barre oblique.


2 commentaires

L'utilisation de crochets ici ne fonctionne pas comme vous le souhaitez. Comparez avec [^ cmo: /.] \ W * (? = /) qui produira les mêmes résultats.


Oui vous avez raison. Merci d'avoir fait remarquer cela. Je noterai que cet exemple devrait fonctionner pour les besoins de la question.



3
votes

Les crochets [...] créent un jeu de caractères qui sélectionne l'un de l'un des caractères qu'ils contiennent. Si un carat est ajouté au début, [^ ...] , cet ensemble est annulé. Le modèle ne considère pas la chaîne complète et continue entre crochets.

En d'autres termes, [aaabbc] équivaut à [abc] (et même [cba] ).

Si vous souhaitez simplement capturer le premier élément de chemin après https://trello.com/c/ dans un groupe, vous pouvez utiliser ce modèle:

https://trello\.com/c/([^/ +).*

Démo: https://regex101.com/r/99FDJS/2

Si vous souhaitez que le modèle corresponde uniquement à cette sous-chaîne dans l'URL, vous pouvez utiliser une anticipation et une recherche en arrière positives:

(?<=https://trello\.com/c/).+?(?=/.*)

Démo: https://regex101.com/r/99FDJS/1


0 commentaires

0
votes

Dans votre modèle, vous utilisez une classe de caractères qui ne correspond qu'à une parmi plusieurs personnages. Commencer par un ^ en fera un annulé classe de caractères qui correspond à tout caractère qui n'est pas dans la classe de caractères.

La classe de caractères n'étant pas suivie d'un quantificateur, ce [^ https: //trello.com/c/] correspondra à un seul i ou - puis \ w + correspondront à 1+ fois un caractère de mot.

Cela vous donnera les correspondances iGjJLqwr , -test et -project

Je pense que vous vouliez faire correspondre l'id dans un groupe de capture:

^https://trello\.com/c/(\w+)
démo regex101

À propos du modèle

  • ^ Affirmer le début de la chaîne
  • https: // trello \ .com / c / Correspond littéralement https://trello.com/c/
  • (\ w +) Capture dans le groupe 1 correspondant à plus de 1 fois un caractère de mot


0 commentaires