0
votes

Regex - correspondant à des occurrences non nécessairement consécutives

J'ai essayé de faire correspondre les occurrences de 0 à 5 entre la plage 3 à 5

Donc, mon objectif est de faire correspondre toutes les cordes contenant 3 à 5 0.

jusqu'à présent, < / p> xxx

sortie attendue

20001 [valide]

200134 [invalide]

20103040 [valide]

203004038002 [INVALI]

Mais cela produirait des chaînes qui ne disposeraient que des zéros consécutifs.

Comment puis-je modifier le code afin qu'il correspond également aux zéros non nécessairement consécutifs?


3 commentaires

Essayez (0 [1-9] *) {3,5}


@V anon j'ai édité ma réponse. Pourriez-vous le lire à nouveau, s'il vous plaît?


Voulez-vous vraiment correspondre à toutes les chaînes ou juste des entiers ou des numéros seulement? Ligne complète ou mot complet ou autre chose? Sortir la ligne de correspondance ou la chaîne correspondante ou autre chose?


4 Réponses :


1
votes

J'ai proposé cette solution qui vous permettrait de vérifier 3-5 0, éventuellement entouré de tout ce qui n'est pas un 0 ou un espace. J'espère que cela aide :) xxx pré>

si vous ne vérifiez que des chaînes de nombres sans pauses entre ou d'autres caractères, vous pouvez échanger le \ b code> s pour ^ code> et $ code> et supprimez les \ s et assurez-vous que ce n'est que des chiffres: p>

^(?:[1-9]*?0[1-9]*?){3,5}$


0 commentaires

0
votes

La regex que vous recherchez est la suivante:

^ (?! (?:. *? 0) {6,}) (?:. *? 0) {3,} ) [0-9] + $ code> p>

Fichier d'entrée: strong> p> xxx pré>

p>

Pour utiliser la regex I Utilisateur grep -p code>, car la notation sur le lookaround (?! code> n'est pas pris en charge dans EGREP P>

grep -P '^(?!(?:.*?0){6,})(?=(?:.*?0){3,})[0-9]+$' file.txt
20001
20103040


0 commentaires

1
votes

fichier d'entrée: xxx

commande: xxx

Explication: xxx


0 commentaires

0
votes

Un autre pour correspondre aux entiers contenant 3-5 0, si c'est ce que vous voulez, est ^ ([1-9] * 0) {3,5} [1-9] * $ , par exemple: xxx

la différence entre cela et @ Toto's Réponse est que cela va Il suffit de faire correspondre des nombres entiers tandis que @totos correspondra à tous les caractères avec 0 s dans entre, par exemple: xxx


0 commentaires