Как извлечь действительное электронное письмо от большей строки в Scala

StackOverflow https://stackoverflow.com/questions/2846025

  •  27-09-2019
  •  | 
  •  

Вопрос

Моя Scala версия 2.7.7

Я пытаюсь извлечь адрес электронной почты из большей строки. Сама строка не соответствует формату. код, который у меня есть:

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

Regex проходит в RegexBuilder, но не проходит для Scala. Также, если есть другой способ сделать это без Regex, который также будет хорошо. Спасибо!

Это было полезно?

Решение

Как отметил Алана Мур, вам нужно добавить (?i) к началу рисунка, чтобы сделать это нечувствительным к регистру. Также обратите внимание, что использование Regeex напрямую соответствует всей строке. Если вы хотите найти один в большей строке, вы можете позвонить findFirstIn() Или используйте один из аналогичных методов 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")
}

Другие советы

Похоже, вы пытаетесь сделать поиск без особых случаев, но вы никуда не указываете. Попробуйте добавить (?i) к началу регеляции:

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

Ну, способы сделать это, кроме Res, вероятно, много Междуннее. Следующим шагом навернется, вероятно, является парсером комбинатором. Многие из случайных строковых кодекса расселения были бы еще более общими и почти наверняка намного больше. Частивая то, что подходящая тактика зависит от того, насколько полной (и насколько строгим или снисходительным) ваше распознавание должно быть. Например, общая форма: Rudolf Reindeer <rudy.caribou@north_pole.rth> не принимается вашим RE (даже после того, как дело-чувствительность расслаблена). Полноуровневый RFC 2822 Анализ адресов довольно сложный для повторного подхода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top