Question

Ma scala la version 2.7.7

Im essayant d'extraire une adresse e-mail à partir d'une chaîne plus grande. la chaîne elle-même suit pas de format. le code que j'ai:

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")
}

le Regex passe RegexBuilder mais ne passe pas pour scala. De plus, s'il y a une autre façon de le faire sans regex qui serait bien aussi. Merci!

Était-ce utile?

La solution

Comme Alan Moore a souligné, vous devez ajouter le (?i) au début du motif pour le rendre insensible à la casse. A noter également que l'utilisation du Regex correspond directement la chaîne entière. Si vous voulez trouver un dans une chaîne plus grande, vous pouvez appeler findFirstIn() ou utiliser l'une des méthodes similaires de Regex.

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")
}

Autres conseils

On dirait que vous essayez de faire une recherche insensible à la casse, mais vous n'êtes pas en précisant que nulle part. Essayez d'ajouter (?i) au début de la regex:

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

Eh bien, les façons de le faire autre que REs sont probablement beaucoup messier. La prochaine étape serait probablement l'un analyseur de Combinator. Beaucoup de code de curage chaîne aléatoire serait encore plus générale et presque certainement beaucoup plus douloureux. En partie ce qui est une tactique appropriée dépend de la façon complète (et comment stricte ou clémente) votre reconnaissance doit être. Par exemple, la forme commune: Rudolf Reindeer <rudy.caribou@north_pole.rth> n'est pas acceptée par votre RE (même après la sensibilité à la casse est détendu). analyse syntaxique d'adresse RFC 2822 entière est plutôt difficile pour une approche fondée sur RE.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top