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. P>
jusqu'à présent, < / p> sortie attendue p>
blockQuote>
blockQquote> 20001 [valide] p> 200134 [invalide] p> 20103040 [valide] p> 203004038002 [INVALI] P> Mais cela produirait des chaînes qui ne disposeraient que des zéros consécutifs. P> Comment puis-je modifier le code afin qu'il correspond également aux zéros non nécessairement consécutifs? P> P>
4 Réponses :
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 :) 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}$
La regex que vous recherchez est la suivante:
Fichier d'entrée: strong> p> Pour utiliser la regex I Utilisateur ^ (?! (?:. *? 0) {6,}) (?:. *? 0) {3,} ) [0-9] + $ code> p>
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
Un autre pour correspondre aux entiers contenant 3-5 0, si c'est ce que vous voulez, est 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 ^ ([1-9] * 0) {3,5} [1-9] * $ code> , par exemple:
0 code> s dans entre, par exemple: p>
Essayez
(0 [1-9] *) {3,5} code>
@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 code> 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?