Recherche doublons (PCRE) [Résolu]

Signaler
Messages postés
9
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
9 décembre 2009
-
Messages postés
9
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
9 décembre 2009
-
Dans la chaine suivante :

12,55,4444,55,45,12,45,55,4444,12,55,44,4444,55,45,12,55,44,55,45,12,45,55,12,55,44,55,45

je veux qu'il trouve tous les doublons.


En fait, je veux le contraire de ce que me retourne cette expression :

(\d+),?(?!.*?\1)

7 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
je l'avais obtenu hier, mais je pensais pas que c'était ce que tu voulais.

(?=(\b\d+\b)(?!.*?\1))|(\b\d+\b)


Merci pour ces pistes pour les prefixes suffixes, je vais pouvoir m'amuser davantage ^^
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
que fait le

(?! )


?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
tu souhaite extraire tous les nombres, de manière unique, c'est cela ?
Messages postés
9
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
9 décembre 2009

Merci d'avoir répondu aussi vite.
(?!    ) cherche si le suffixe n'est pas présent.
Je vais essayer de clarifier ma demande :

Cette expression : (\d+),?(?!.*?\1) me retourne les nombres (avec la virgule) qui sont en gras et rouge :
12,55,4444,55,45,12,45,55,4444,12,55,44,4444,55,45,12,55,44,55,45,12,45,55,12,55,44,55,45

alors que moi je cherche à avoir le contraire, c'est-à-dire que je veux :
12,55,4444,55,45,12,45,55,4444,12,55,44,4444,55,45,12,55,44,55,45,12,45,55,12,55,44,55,45
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
aisé a obtenir, mais là, tu séléctionne 4444 55 et 12 alors qu'ils sont en double....

(voir motifs conditionnels)

pas pigé le coup du suffixe, ça m'a l'ai puissant. j'ai fait des tests mais j'ai pas pigé l'astuce
Messages postés
9
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
9 décembre 2009

> "aisé a obtenir, mais là, tu séléctionne 4444 55 et 12 alors qu'ils sont en double...."
Oui je sais, ça peut paraitre bizarre mais c'est ce que je cherche à faire, je ne veux que les doublons.

Je crois que j'ai pu trouver quelque chose de fonctionnel :

(?x)
(?<=           # cherche si le préfixe est présent et l'exclu du résultat
  ,|^
)
(.+?),         # chaine à chercher (tous les caractères)
(?=            # cherche si le suffixe est présent et l'exclu du résultat
  .*?
  (?:\1,|\1$)
)

<hr width="100%" size="2" />Concernant le suffixe (?!   ), voilà un exemple :

aaa(?!bbb)   # vérifie si la chaine bbb N'est PAS présente

aaabbbccc    # ne retourne rien car aaa est suivi de bbb
aaaxxxbbbccc # retourne aaa

<hr width="100%" size="2" />> "(voir motifs conditionnels)"

J'y avais pensé mais je n'ai pas réussi à trouver la solution avec. Je crois que je n'arrive pas bien à m'en servir.
Si par exemple dans la chaine : "aaabbbccc" je veux qu'il me retourne "aaa" suivi de tout le reste si, et seulement si, "aaa" est suivi de "bbb", et bien je fais :
(aaa)(?([b]{3}).+)
mais le problème c'est qu'écrit comme ça, ça ne marche pas dans mon script, il ne reconnait pas cette syntaxe (j'utilise AutoIt ).
D'ailleurs, j'utilise 2 éditeurs : Expresso et RegexBuddy, cette syntaxe fonctionne dans Expresso, par contre dans RegexBuddy, ça ne marche que quand je sélectionne le "Regex Flavor" .NET (je sélectionne toujours PCRE d'habitude).
Messages postés
9
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
9 décembre 2009

Ah oui ! en effet, c'est aussi une solution.

Merci !