1

¿Cómo puedo con una expresión regular seleccionar desde desde el tercer caracter en adelante de cada palabra?

Por ejemplo, dada la siguiente entrada con las palabras:

manzana limon uva el la naranja tomate cereza coco

La expresión regular iría seleccionando:

nzana, mon, a, ranja, mate, reza, co

(separo por comas cada ocurrencia de la búsqueda mediante expresión regular)

La herramienta a utilizar sería regex101.com (PCRE)

Tengo dudas para lograrlo: No sé si tengo que utilizar \b, o quizas un grupo de captura o grupo condicional.

Gracias.

Julio
  • 3,173
  • 1
  • 7
  • 23
  • Esto es en algun lenguaje en particular? DE paso, intentaste algo? – gbianchi Apr 25 '19 at 02:57
  • intento fallido /.{2}(.+)$/gm. Otro (?=[\b[a-z]{2}])\w+ – Vicini Edgar Apr 25 '19 at 03:06
  • El código que usas y los errores que genera / el resultado inesperado se ponen en la pregunta, editándola. – Alfabravo Apr 25 '19 at 10:51
  • Pero cual es la pregunta, presenta tu solucion y en donde tienes problemas. – Miguel Zarate Apr 25 '19 at 14:09
  • Te recomiendo primero revisar una referencia de expresiones regulares https://es.stackoverflow.com/questions/223553/qu%C3%A9-significa-esta-expresi%C3%B3n-regular-referencia-de-expresiones-regulares/223555#223555 – Ruslan López Apr 26 '19 at 15:56
  • Creo que la pregunta está ahora clara y quizás se podría reabrir... CC: @gbianchi – Julio May 13 '19 at 13:08
  • AP abandono la pregunta hace tiempo. Abrirla no tiene ningun sentido porque no va a tener una respuesta correcta. Y como si fuera poco, la edicion deberia ser rechazada porque cambio todo el sentido original de la pregunta. En estos casos, se recomienda que hagas una nueva pregunta y agregues la respuesta si asi se puede discutir y aceptar. – gbianchi May 13 '19 at 13:26

3 Answers3

4

Prueba con lo siguiente:

\w\w\K\w+

Tienes una demo aquí.

Explicado:

\w\w   # Dos caracteres
\K     # Ignoramos lo encontrado anteriormente
\w+    # De uno a más caracteres
Julio
  • 3,173
  • 1
  • 7
  • 23
1

Esta te funciona:

\b *..(.*?)\b
  • \b representa un word boundary, o sea un inicio o final de palabra. Encajaría con el inicio de la primera palabra, o con el final de la palabra anterior para cada una de las siguientes.
  • * es para "comerse los espacios" por si el \b había encajado con el final de palabra de la anterior.
  • .. son las dos primeras letras de la palabra que en que estamos
  • (.*?) es un grupo de captura non-greedy que capturará todo lo que pueda hasta llegar al siguiente:
  • \b, que es otro word boundary, o sea, el final de la palabra.

Demo aqui

abulafia
  • 53,696
  • 3
  • 45
  • 80
  • o quizas \b *\w{2}(\w*?)\b – Vicini Edgar Apr 25 '19 at 14:37
  • @ViciniEdgar Es un poco redundante usar `\w` ya que eso significa "word-character", lo cual por definición es cualquier cosa que esté entre dos "word-boundaries". Por tanto todo lo que mi expresión capturaría con el `.*` serían también "word-characters". ¿O estás pensando en algún caso que se me escapa? – abulafia Apr 25 '19 at 14:40
  • como sustituimos lo seleccionado en verde con la nada, eliminar? – Vicini Edgar Apr 25 '19 at 14:49
  • Depende del lenguaje de programación. Muchos lenguajes tienen una función de substitución que reemplaza lo que encaje con cada grupo de captura por otra cosa. – abulafia Apr 25 '19 at 14:51
0

https://regex101.com/r/7dZxvU/2

expresion regular: (?<=ma)nzana

Utiliza una declaración positiva de búsqueda hacia atrás (positive lookbehind assertion)

enxaneta
  • 3,708
  • 2
  • 9
  • 20