regex - test - simplificar expresiones regulares online
Expresión regular para unir cualquier personaje repetido más de 10 veces (9)
Estoy buscando una expresión regular simple para que coincida con el mismo personaje que se repite más de 10 o más veces. Entonces, por ejemplo, si tengo un documento lleno de líneas horizontales:
=================================================
Coincidirá con la línea de =
caracteres porque se repite más de 10 veces. Tenga en cuenta que me gustaría que esto funcione para cualquier personaje.
Ejemplo de preg_replace
de PHP:
$str = "motttherbb fffaaattther";
$str = preg_replace("/([a-z])//1/", "", $str);
echo $str;
Aquí [az]
golpea al personaje, ()
luego permite que se use con referencia inversa //1
que intenta hacer coincidir otro mismo personaje (obsérvese que esto ya tiene como objetivo 2 caracteres consecutivos), por lo tanto:
madre padre
Si lo hiciste:
$str = preg_replace("/([a-z])//1{2}/", "", $str);
eso sería borrar 3 caracteres repetidos consecutivos, dando como resultado:
moherbb ella
En Python puedes usar (.)/1{9,}
- (.) hace grupo de un char (cualquier char)
- / 1 {9,} coincide con nueve o más caracteres del primer grupo
ejemplo:
txt = """1. aaaaaaaaaaaaaaa
2. bb
3. cccccccccccccccccccc
4. dd
5. eeeeeeeeeeee"""
rx = re.compile(r''(.)/1{9,}'')
lines = txt.split(''/n'')
for line in lines:
rxx = rx.search(line)
if rxx:
print line
Salida:
1. aaaaaaaaaaaaaaa
3. cccccccccccccccccccc
5. eeeeeeeeeeee
En algunas aplicaciones, necesitas quitar las barras para que funcione.
/(.)/1{9,}/
o esto:
(.)/1{9,}
La expresión regular que necesita es /(.)/1{9,}/
.
Prueba:
#!perl
use warnings;
use strict;
my $regex = qr/(.)/1{9,}/;
print "NO" if "abcdefghijklmno" =~ $regex;
print "YES" if "------------------------" =~ $regex;
print "YES" if "========================" =~ $regex;
Aquí el /1
se llama retroreferencia. Hace referencia a lo que captura el punto .
entre los corchetes (.)
y luego el {9,}
pregunta por nueve o más del mismo personaje. Por lo tanto, esto coincide con diez o más de un solo personaje.
Aunque el script de prueba anterior está en Perl, esta es una sintaxis de expresiones regulares muy estándar y debería funcionar en cualquier idioma. En algunas variantes, es posible que necesites usar más barras invertidas, por ejemplo, Emacs te haría escribir /(./)/1/{9,/}
aquí.
Si una cadena completa debe constar de 9 o más caracteres idénticos, agregue anclas alrededor del patrón:
my $regex = qr/^(.)/1{9,}$/;
Parece que la expresión regular que necesitas es: 8 = * D
grep -E "8=*D" sampletext
También puede usar PowerShell para reemplazar rápidamente palabras o reptiles de caracteres. PowerShell es para Windows. La versión actual es 3.0.
$oldfile = "$env:windir/WindowsUpdate.log"
$newfile = "$env:temp/newfile.txt"
$text = (Get-Content -Path $oldfile -ReadCount 0) -join "`n"
$text -replace ''/(.)/1{9,}/'', '' '' | Set-Content -Path $newfile
usa el operador {10,}:
$: cat > testre
============================
==
==============
$: grep -E ''={10,}'' testre
============================
==============
.
coincide con cualquier personaje. Usado en conjunto con las llaves usadas ya mencionadas:
$: cat > test
========
============================
oo
ooooooooooooooooooooooo
$: grep -E ''(.)/1{10}'' test
============================
ooooooooooooooooooooooo
={10,}
matches =
que se repite 10 o más veces.