1
votes

Regex, recherchez le code en majuscules mais n'incluez pas les nombres commençant par des signes dollar

J'ai des chaînes qui ressemblent à ceci ...

Si vous voulez faire des achats en magasin, utilisez ce coupon ZXXZX123 pour économiser 20 $ sur votre achat en magasin de 100 $ ou plus, ou 100 $ de réduction de 500 $ ou plus. "

En fin de compte, tout ce que je veux, c'est ZXXZX123

J'ai commencé avec ceci qui recherche des majuscules et des nombres et doit comporter au moins 2 caractères. Après cela, je ne sais pas comment ne pas inclure les autres. Je suppose que d'autres expressions peuvent inclure des choses comme 20% de réduction, donc je ne veux pas non plus inclure ces types de nombres.

[A-Z0-9]{2,}


1 commentaires

Ne pouvez-vous pas être plus précis sur le format d'un code promo? Cela commence-t-il toujours par une lettre ou peut-il commencer par un chiffre? Cela peut-il être uniquement des lettres? Cela peut-il être uniquement des chiffres? Peut-il contenir 20 caractères? Plus vous pouvez être précis, meilleure sera la regex.


4 Réponses :


1
votes

Vous pouvez utiliser des recherches pour vous assurer que vous correspondez à un mot entier (chaîne entre les espaces):

(?<=\s|^)[A-Z0-9]{2,}(?=\s|$)

Démo

Explication :

  • (? est une recherche positive, cela garantit qu'il y a un espace avant le caractère suivant qui correspond ou qu'il s'agit du début de la chaîne
  • (? est une anticipation positive, cela garantit qu'il y a un après avant le caractère précédent qui correspond à la fin de la chaîne


5 commentaires

ZXXZX123 est le code du coupon et cet exemple ne fonctionnera pas. Comme le code de coupon doit être entre deux mots. Lorsque vous délimitez ce mot, il y aura un espace autour du code de coupon. Donc, pour la chaîne que j'ai écrite ci-dessus, cela ne fonctionnera pas.


Merci, corrigé ça


Un regard positif derrière, au début, n'est pas une bonne idée car il manquera un autre scénario. Juste au cas où, par exemple. regex101.com/r/XU3AID/5 . Ne le prenez pas personnellement juste une pensée.


Merci de l'avoir signalé. Ce texte n'est cependant pas bien formaté - il devrait y avoir un espace après un point.


Merci à tous pour vos soumissions. Je les ai tous essayés et ils semblent tous fonctionner pour ce dont j'ai besoin. mrzasa a eu la première réponse et je l'utilise actuellement et ça marche vraiment bien. Je suppose qu'avec regex il n'y a pas de moyen définitif d'accomplir une tâche.



0
votes

Veuillez utiliser cette expression régulière, cela ne capturera que les codes de réduction.

Regex: '[A-Z .[A-Z0-9ITED+'

Explication:
[A-Z] : la première lettre est l'alphabet et est MAJUSCULE.
[A-Z0-9] + : à partir de la deuxième lettre, il recherchera une combinaison de chiffres 0-9 ou / et d'alphabet en MAJUSCULES.

Lien vers l'exemple: https://regex101.com/r/ XU3AID / 1

Faites-moi savoir si vous avez des questions.


5 commentaires

Cela capturera également «Quoi» et «OK».


Maintenant, vous avez un problème différent. Il ne capture pas la totalité de "XY02AB".


@tricot: Avec tout le respect que je vous dois, et sans aucune hypothèse, utilisez le lien que j'ai donné comme exemple. Si cela échoue, veuillez me le faire savoir. Il ne devrait pas et ce ne sera pas le cas avec les deux exemples que vous m'avez donnés.


L'expression régulière dans regex101.com/r/XU3AID/1 et regex101.com/r/XU3AID/2 sont différents. Mon premier commentaire concernait le premier - où "Quoi" est effectivement rejeté (mon erreur), mais OK ne l'est pas (démo: regex101.com/r/XU3AID/4 ), puis vous avez posté le deuxième, et mon deuxième commentaire est à ce sujet (démo: regex101.com/r/XU3AID/3 ).


1. Données dans une phrase avec CamelCase. Les moyens commencent par le premier mot d'une phrase et commencent par Capital rest sauf que le code de coupon est en minuscules. Donc Regex dans l'exemple 1 fonctionne très bien selon ma compréhension. 2. La deuxième regex que j'ai créée pour vous montrer, même si je supprime des mots, elle fonctionnera toujours et vous avez convenu que c'était votre erreur. Ici, l'hypothèse est que le code du coupon sera MAJUSCULE et qu'il contiendra des chiffres.



0
votes

Vous pouvez diviser les expressions de correspondance pour les caractères majuscules et les chiffres, puis les combiner avec un "not $" au milieu.

[A-Z] + [^ \ $] [0-9] +


1 commentaires

[^ \ $] n'est pas requis. Le Regex fonctionnera sans cela aussi. Essaye le. Comme vous le mettez à la dernière position dans le mot.



0
votes

Le simple fait d'exclure le signe dollar correspondrait à d'autres caractères comme les espaces blancs par exemple. Cela ne fonctionnera donc pas: [^ \\ $] [A-Z0-9] {2,}

À la place, faites correspondre les espaces précédant le code, mais excluez-les en utilisant le groupe de capture: [\\ s] ([A-Z0-9] {2,}) et dans votre numéro de groupe de référence de correspondance ou de remplacement 1. Voir https://regexr.com/45shq


0 commentaires