Pregunta

Mi Scala versión 2.7.7

Estoy tratando de extraer una dirección de correo electrónico de una cadena más grande. la propia cadena sigue sin formato. el código que tengo:

import scala.util.matching.Regex
import scala.util.matching._
val Reg = """\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b""".r
"yo my name is joe : joe@gmail.com" match {
    case Reg(e) => println("match: " + e)
    case _ => println("fail")
}

la expresión regular pasa en RegexBuilder pero no pasa por Scala. También si hay otra manera de hacer esto sin expresiones regulares que estaría bien también. Gracias!

¿Fue útil?

Solución

Como Alan Moore señaló, es necesario añadir el (?i) al principio del patrón para que sea sensible a las mayúsculas. También tenga en cuenta que el uso de la expresión coincide directamente toda la cadena. Si desea encontrar uno dentro de una cadena más grande, puede llamar findFirstIn() o uso uno de los métodos similares de expresión regular.

val reg = """(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b""".r
reg findFirstIn "yo my name is joe : joe@gmail.com"  match {
    case Some(email) => println("match: " + email)
    case None => println("fail")
}

Otros consejos

Parece que estamos tratando de hacer una búsqueda sensible a las mayúsculas, pero no se especifica que en cualquier lugar. Trate de añadir (?i) al comienzo de la expresión regular:

"""(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b""".r

Bueno, las maneras de hacerlo que no sea ER son probablemente un montón desordenado. El siguiente paso sería probablemente el analizador un combinador. Una gran cantidad de código de cadena de la disección al azar sería aún más general y casi con toda seguridad mucho más dolorosa. En parte, lo que es una táctica adecuada depende de la forma completa (y lo estricto o indulgente) el reconocedor tiene que ser. Por ejemplo, la forma común: Rudolf Reindeer <rudy.caribou@north_pole.rth> no es aceptada por el RE (incluso después de la sensibilidad a mayúsculas está relajado). En toda regla RFC 2822 dirección de análisis sintáctico es un gran reto para un enfoque basado en el RE.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top