Encontrar patrones en strings

A veces necesitamos encontrar patrones en strings en Scala. Un caso muy común sería, por ejemplo, verificar si un String contiene una expresión regular. Una posible solución para este problema sería crear un objeto Regex invocando el método .r en un String y luego usar ese patrón con la función findFirstIn cuando estemos buscando una sola coincidencia y findAllIn cuando deseemos todas las coincidencias. A continuación veamos cómo trabajar con estos dos enfoques.

Encontrar la primera coincidencia

Lo primero que vamos a realizar es crear la expresión regular la cual deseamos buscar en el String. Para este ejemplo vamos a crear una expresión que busque una secuencia de uno o más caracteres numéricos.
				
					val patronNum = "[0-9]+".r // scala.util.matching.Regex = [0-9]+
				
			
Usar el método .r en un String es la forma más fácil de crear un objeto Regex. Otro posible enfoque sería importar la clase Regex, crear una instancia de Regex y luego usar la instancia de la misma forma.
				
					import scala.util.matching.Regex

val patronNum = Regex("[0-9]+")
				
			
Lo siguiente que vamos a realizar es crear un String de muestra sobre el cual podamos buscar coincidencias con el patrón creado anteriormente.
				
					val frase = "Hoy es 02 de Enero del año 2023"
				
			
A continuación utilizamos el método findFirstIn para encontrar la primera coincidencia dentro del String.
				
					val coincidencia1 = patronNum.findFirstIn(frase)
				
			

 La salida generada por esta línea de código es la siguiente.

				
					coincidencia1: Option[String] = Some(02)
				
			
Notemos como este método retorna un Option[String]. Una forma sencilla de pensar en Option es que contiene cero o un valor. Para el caso de la función findFisrtIn, si la búsqueda es exitosa devuelve el string "02" dentro de Some, es decir, Some(02). Sin embargo, si falla en encontrar el patrón en el string retorna None.

 Si deseas aprender a trabajar con Apache Spark a través de Scala te invito a que te inscribas a mi curso:

 Spark y Scala en Databricks: Big Data e ingeniería de datos

 Trabajo desde niveles básicos hasta avanzados con RDD y DataFrame.

Encontrar múltiples coincidencias

Cuando buscamos múltiples coincidencias debemos usar la función findAllIn.
				
					val coincidencias = patronNum.findAllIn(frase)
				
			

 La salida generada por esta línea de código es la siguiente.

				
					coincidencias: scala.util.matching.Regex.MatchIterator = <iterator>
				
			

 Como se puede observar findAllIn retorna un iterador el cual nos permite iterar sobre el resultado.

				
					coincidencias.foreach(println)
				
			

 El resultado de esta última línea de código es el siguiente. 

				
					02
2023
				
			

 Si findAllIn no encuentra ningún resultado este retorna un iterador vacío. Si por ejemplo, necesitamos el resultado como vector podríamos agregar la función toVector después de la función findAllIn.

				
					val coincidencias = patronNum.findAllIn(frase).toVector
				
			

 Obteniendo como resultado:

				
					coincidencias: Vector[String] = Vector(02, 2023)
				
			

 Si no existen coincidencias esta última línea devuelve como resultado un vector vacío. Otros métodos como toList, toSeq y toArray también están disponibles de la misma forma que acabamos de demostrar.

Entradas creadas 25

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicaciones relacionadas

Comienza escribiendo tu búsqueda y pulsa enter para buscar. Presiona ESC para cancelar.

Volver arriba