我试图使用Scala中的Regex从给定的字符串中提取Datalake。有人能帮忙吗?
Input = adl://asbwje-fhs.azuredatalakestore.net/123/wds/xyz=456/
Output = adl://asbwje-fhs.azuredatalakestore.netADL可以在定义中包含[a-zA-Z_-]。我试过以下几种方法:
scala> val ADLStorePattern = "(.*) ([a-zA-Z_-]+) (.net) (.*)".r
ADLStorePattern: scala.util.matching.Regex = (.*) ([a-zA-Z_-]+) (.net) (.*)
scala> val ADLStorePattern(adl, _, _) = "adl://asbwje-fhs.azuredatalakestore.net"
scala.MatchError: adl://asbwje-fhs.azuredatalakestore.net (of class java.lang.String)
... 32 elided
scala> val ADLStorePattern(adl, _) = "adl://asbwje-fhs.azuredatalakestore.net"
scala.MatchError: adl://asbwje-fhs.azuredatalakestore.net (of class java.lang.String)
... 32 elided
scala> val ADLStorePattern(_, adl, _) = "adl://asbwje-fhs.azuredatalakestore.net"
scala.MatchError: adl://asbwje-fhs.azuredatalakestore.net (of class java.lang.String)
... 32 elided
scala> val ADLStorePattern(_, adl, _, _) = "adl://asbwje-fhs.azuredatalakestore.net"
scala.MatchError: adl://asbwje-fhs.azuredatalakestore.net (of class java.lang.String)
... 32 elided
scala> val ADLStorePattern = "([a-zA-Z_-]+) (.net) (.*)".r
ADLStorePattern: scala.util.matching.Regex = ([a-zA-Z_-]+) (.net) (.*)
scala> val ADLStorePattern(adl, _) = "adl://asbwje-fhs.azuredatalakestore.net"
scala.MatchError: adl://asbwje-fhs.azuredatalakestore.net (of class java.lang.String)
... 32 elided
scala> val ADLStorePattern(adl, _, _) = "adl://asbwje-fhs.azuredatalakestore.net"
scala.MatchError: adl://asbwje-fhs.azuredatalakestore.net (of class java.lang.String)
... 32 elided发布于 2017-08-24 23:18:29
您可以从Regex模式的第一组提取FQDN,如下所示:
val url = "adl://asbwje-fhs.azuredatalakestore.net/123/wds/xyz=456/"
val pattern = """(adl://[^/]*)(/.*)?""".r
val fqdn: String = url match {
case pattern(x, _) => x
case _ => "No match!"
}
// fqdn: String = adl://asbwje-fhs.azuredatalakestore.net第二个可选组包括URL仅由FQDN部分组成的情况。
https://stackoverflow.com/questions/45871815
复制相似问题