-1
votes

Regex Trouver toutes les premières occurrences uniques de caractère dans une chaîne

J'ai suivi de la chaîne

1,2,3, A, B, C, A, B, C, 1,2,3, C, B, A, 2,3,1,

Je voudrais obtenir uniquement la première occurrence de n'importe quel nombre sans changer la commande. Ce serait

1,2,3, a, b, c,

avec cette regex (trouvé @ https://stackoverflow.com/a/29480898/9307482 ) Je peux trouver eux, mais seulement les dernières occurrences. Et cela renverse la commande.

(\ w) (?!. *? \ 1) ( https://regex101.com/r/3fqpu9/1 )

Peu importe si la regex ignore la virgule. La commande est importante.


6 commentaires

Depuis que vous avez affaire à des personnages, cette question est peut-être mieux répondu à l'utilisation de tableaux réguliers, à des ensembles, etc.


Pourquoi votre exemple de sortie a-t-il également des lettres? Voulez-vous aussi les lettres aussi?


Je veux dire, vous pourrait simplement utiliser votre regex tel qu'il est. Vous devez juste inverser votre chaîne avant de l'utiliser et inverser le résultat après :)


Si vous pouvez utiliser JS, voir / (\ w) (? à regex101.com/r/airt5j/1 .


Veuillez baliser votre question avec l'environnement de la langue que vous utilisez Regex in.


@RRYSZARDCZECH: Longueur variable LookbeHind n'est pas prise en charge dans de nombreuses langues.


3 Réponses :


3
votes

L'expression régulière n'est pas destinée à cette fin. Vous devrez utiliser un filtre d'index ou défini sur une maquette de caractères.

puisque vous n'avez pas de langue spécifiée, je suppose que vous utilisez JavaScript.

Exemple modifiée de: Httptps://stackoverflow.com/a/14438954/1456201 xxx


10 commentaires

Qui trouve tous les caractères uniques non?


Oui, je l'ai mis à jour pour montrer l'exemple fourni dans la question.


array.from n'est pas nécessaire, comme ceci est ibler.


Je pense que c'est à propos de tous les premiers personnages uniques.


@Thefourthbird pas sûr de ce que tu veux dire


Le motif de l'OP trouve déjà les caractères uniques, mais il trouve les dernières occurrences. Je pense que la question consiste à faire correspondre les premières occurrences à la place.


La réponse fait ça. Un ensemble utilisera la première occurrence d'un personnage puis élimine toute occurrence future du même caractère. Il renvoie le résultat exact attendu dans la question. Même si le script ne se soucie pas de l'ordre, il commence à partir du début et inclut uniquement des caractères uniques du début de la chaîne, comme prévu dans la question.


@Jim je n'étais pas au courant du fonctionnement interne d'un ensemble. Dans ce cas, si la langue est javascript, elle est brillante;) +1


Vous pouvez y penser comme un objet où chaque propriété (clé) est un caractère de la chaîne. À partir du début de la chaîne, définissez chaque caractère comme une propriété d'objet. Évidemment, lorsque vous écrasez une propriété existante, cela n'ajoute rien de nouveau, il ne fait que définit un nom de propriété existant comme la même valeur que celle qui soit déjà définie. Ensuite, il vous suffit de sortir les noms de propriété et vous n'obtenez que des caractères uniques de FIFO.


Merci. Ceci est un problème dans Autohotkey. Je pensais que c'était possible avec un simple regexMatch. Par conséquent, je n'ai pas mentionné explicite la langue. Merci pour la réponse.



0
votes

J'utiliserais quelque chose comme ceci: xxx

Pour interpréter, pour la matrice des chiffres, car vous n'avez rien dans l'index 0, vous savez que vous n'avez aucune occurrence de zéro. Étant donné que vous avez un zéro dans l'index 1, vous savez que votre premier apparaît dans le premier caractère de votre chaîne (index zéro pour la matrice). Deux apparaissent dans l'index 1 et ainsi de suite ..


0 commentaires

0
votes

Un moyen de faire passer le travail: xxx pré>

sortie: strong> p>

4,d,e,1,2,3,a,b,c,f


0 commentaires