3
votes

RegEx pour faire correspondre les majuscules et les tirets suivis d'une virgule

Tentative de suppression des chaînes qui suivent le modèle

La balise commence par

Athletics, Fitted, Mesh, Feature_Moisture Wicking, Material_Polyester 100%, , Material_Polyester 100%, Material_Polyester Over 50%,  School, Style_Short Sleeves, Size_2XL, Size_L, Size_M, Size_S, Size_XL, Size_XS, Size: XS-S-M-L-XL-2XL, Uniforms, Unisex, V-Neck, VisibleLogos, Youth

et avant le prochain COMMA (,) inclut le - personnage.

Exemple :

Size:(.*)-*(.?),

ou

Size: XS-S-M,

etc.

SERAIT sélectionné (y compris ,)

mais Size_S, serait ignoré car il n'y a pas de -

Je suis proche de:

Size: XS-S-M-L-XL-2XL,

Mais je ne m'arrête toujours pas à ,

Voici 1 ligne de balises:

Size:  

Pour supprimer toutes les balises "range" de taille de mes cellules et ne laisser que la balise de taille unique.

La solution peut être trouvée ici: regex101.com/r/VuTzba/1


2 commentaires

Pourquoi ne pas utiliser annulé une virgule comme ceci au lieu du point.


À quoi ressemblerait le tag si le produit venait uniquement en petit format? Cela ressemblerait-il à Size: S sans tiret?


3 Réponses :


0
votes

Nous pourrions vouloir ajouter plus de limites à notre expression ici. Commençons par quelque chose de similaire à:

Size:\s+([A-Z0-9-]+),

où le groupe de capture () collecte les données souhaitées.

 entrez la description de l'image ici

RegEx

Si cette expression n'était pas souhaitée, elle peut être modifiée ou changée dans regex101.com .

Circuit RegEx

jex.im permet également de visualiser les expressions.

 entrez la description de l'image ici


0 commentaires

2
votes

Dans votre modèle Size: (. *) - * (.?), vous correspondez d'abord jusqu'à la fin de la chaîne en utilisant (. *) .

Après cela, le trait d'union - * et le caractère unique dans le groupe (.?) sont facultatifs, il reviendra donc jusqu'à la dernière virgule car c'est le seul caractère qui doit correspondre.

Pour obtenir une correspondance plus exacte, vous pouvez utiliser un motif répétitif pour correspondre aux tailles:

Size: (?:\d*X[SL]|L|M|S|\d+W)(?:-(?:\d*X[LS]|L|M|S|\d+W))*(?:,|$)

Explication

  • Taille: Faites correspondre la taille suivie d'un espace
  • (?: Groupe sans capture
    • \ d * X [SL] | L | M | S correspond à l'un des éléments répertoriés dans l'alternance
  • ) Fermer le groupe
  • (?: Groupe sans capture
    • - (?: \ d * X [LS] | L | M | S) Faire correspondre un trait d'union suivi de l'un des éléments répertoriés
  • ) *, Fermer le groupe et répéter plus de 0 fois et faire correspondre une virgule

Démo Regex

Comme modèle plus large pourrait utiliser une classe de caractères et lister tous les caractères autorisés Size: [XSML \ d] + (?: - [XSML \ d] +) *, ou correspondre jusqu'à la première virgule Size : [^,] +,

Modifier

Pour correspondre également à Taille: 28W-30W-32W-34W-36W -38W-40W, taille: 28W-30W-32W-34W ou vous pouvez utiliser étendre la classe de caractères en y ajoutant | \ d + W et terminer le motif correspondant soit par une virgule ou affirmer la fin de la chaîne $

Size: (?:\d*X[SL]|L|M|S)(?:-(?:\d*X[LS]|L|M|S))*,

Démo Regex


6 commentaires

Vous m'avez sauvé une tonne de temps! Tellement génial, merci beaucoup!


Le seul problème est que cela ne ramasse pas les balises comme Taille: 28W-30W-32W-34W-36W-38W-40W, Taille: 28W-30W-32W-34W Une suggestion?


Bien sûr, vous pouvez ajouter cette option à l'alternance regex101.com/r/fQwTxO/2 et peut-être rendre la virgule à la fin facultative ,?


Encore une fois, je suis vraiment reconnaissant de votre aide et de la première suggestion que vous avez donnée à DID pour éliminer la plupart de l'encombrement, mais j'ai encore un peu de mal à supprimer les autres tailles comme je l'ai mentionné ci-dessus. La révision que vous avez faite a pris en compte la plupart des tailles de problème, mais elle a également récupéré les balises qui n'ont pas le caractère - . Par exemple, Size: 34W, est également capturé alors qu'il ne devrait pas l'être. J'ai mis à jour regex101.com/r/fQwTxO/3 avec d'autres balises à vous donner un meilleur look, si vous avez le temps de le vérifier. Je vous remercie!


Cela a aidé à en supprimer un peu plus, mais juste pour vous montrer le désordre qui me reste, j'ai partagé les lignes analysées restantes. regex101.com/r/fQwTxO/5 Normalement, chacune de ces lignes se terminerait par , mais je remplace par / n pour voir plus facilement.


@WillRodgers Peut-être que cela obtiendra toutes vos correspondances regex101.com/r/VuTzba/1



0
votes

Size: \ s * (. *?), récupérera tout après les deux points et avant la virgule suivante en sautant l'espace blanc au début.


0 commentaires