Je recherche une expression régulière simple pour correspondre au même caractère répété plus d'une dizaine de fois. Par exemple, si j'ai un document jonché de lignes horizontales:
=================================================
Il correspondra à la ligne de =
caractères car il est répété plus de 10 fois. Notez que j'aimerais que cela fonctionne pour n'importe quel personnage.
Réponses:
Le regex dont vous avez besoin est
/(.)\1{9,}/
.Tester:
Ici,
\1
on appelle une référence arrière. Il fait référence à ce qui est capturé par le point.
entre les crochets(.)
, puis{9,}
demande neuf ou plus du même caractère. Ainsi, cela correspond à dix ou plus de n'importe quel caractère unique.Bien que le script de test ci-dessus soit en Perl, il s'agit d'une syntaxe regex très standard et devrait fonctionner dans n'importe quel langage. Dans certaines variantes, vous devrez peut-être utiliser plus de barres obliques inverses, par exemple Emacs vous obligerait à écrire
\(.\)\1\{9,\}
ici.Si une chaîne entière doit être composée de 9 caractères identiques ou plus, ajoutez des ancres autour du motif:
la source
En Python, vous pouvez utiliser
(.)\1{9,}
exemple:
Production:
la source
.
correspond à n'importe quel caractère. Utilisé en conjonction avec les accolades déjà mentionnées:la source
grep -E '([=o])\1{10}' test
et degrep -E '([=o]){10}' test
belles œuvres avec votre exemple (notez l'absence de\1
la deuxième commande). Mais la commandegrep -E '([=o])\1{10}' <<< '==o==o==o==o==o==o===o==o==='
ne correspond pas à la ligne! Cependant , la commande sans\1
correspondance dans la ligne:grep -E '([=o]){10}' <<< '==o==o==o==o==o==o===o==o==='
. Pouvez-vous expliquer? Cheers;)Sur certaines applications, vous devez supprimer les barres obliques pour que cela fonctionne.
ou ca:
la source
utilisez l'opérateur {10,}:
la source
Vous pouvez également utiliser PowerShell pour remplacer rapidement des mots ou des représentations de caractères. PowerShell est pour Windows. La version actuelle est la 3.0.
la source
preg_replace
Exemple de PHP :Ici
[a-z]
frappe le personnage,()
puis lui permet d'être utilisé avec une\\1
référence arrière qui tente de faire correspondre un autre même caractère (notez que cela cible déjà 2 caractères consécutifs), ainsi:Si vous avez fait:
cela effacerait 3 caractères répétés consécutifs, produisant:
la source
correspondances
=
répétées 10 fois ou plus.la source
perl -e 'print "NO" if "abcdefghijklmno" =~ /.{10,}/;'
Un exemple de PowerShell un peu plus générique. Dans PowerShell 7, le match est mis en évidence, y compris le dernier espace (pouvez-vous mettre en évidence dans la pile?).
la source