tmp*_*ies 8 string split functional-programming scala pattern-matching
是否有可能将字符串分成lexems
"user@domain.com" match {
case name :: "@" :: domain :: "." :: zone => doSmth(name, domain, zone)
}
Run Code Online (Sandbox Code Playgroud)
换句话说,就像列表一样......
Ako*_*chy 20
是的,您可以使用Scala的Regex功能执行此操作.
我在这个网站上发现了一个电子邮件正则表达式,如果这不适合你,可以随意使用另一个:
[-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,4}
Run Code Online (Sandbox Code Playgroud)
我们要做的第一件事是在组周围添加括号:
([-0-9a-zA-Z.+_]+)@([-0-9a-zA-Z.+_]+)\.([a-zA-Z]{2,4})
Run Code Online (Sandbox Code Playgroud)
有了这个,我们有三个小组:在TLD 之前@
,之间@
和之后的部分.
.
现在我们可以从中创建一个Scala正则表达式,然后使用Scala的模式匹配unapply来将正则表达式中的组绑定到变量:
val Email = """([-0-9a-zA-Z.+_]+)@([-0-9a-zA-Z.+_]+)\.([a-zA-Z]{2,4})""".r
Email: scala.util.matching.Regex = ([-0-9a-zA-Z.+_]+)@([-0-9a-zA-Z.+_]+)\.([a-zA-Z] {2,4})
"user@domain.com" match {
case Email(name, domain, zone) =>
println(name)
println(domain)
println(zone)
}
// user
// domain
// com
Run Code Online (Sandbox Code Playgroud)
首先Scala 2.13
,可以String
通过不应用字符串插值器来模式匹配 s :
val s"$user@$domain.$zone" = "user@domain.com"
// user: String = "user"
// domain: String = "domain"
// zone: String = "com"
Run Code Online (Sandbox Code Playgroud)
如果您期望输入格式错误,您还可以使用匹配语句:
"user@domain.com" match {
case s"$user@$domain.$zone" => Some(user, domain, zone)
case _ => None
}
// Option[(String, String, String)] = Some(("user", "domain", "com"))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5202 次 |
最近记录: |