Regex Scala:如何始终从具有不同前缀和/或后缀的字符串中提取相同的子字符串
给定以下字符串Regex Scala:如何始终从具有不同前缀和/或后缀的字符串中提取相同的子字符串,regex,scala,Regex,Scala,给定以下字符串 val s0 = "objects" val s1 = "/objects" val s2 = "/objects(0)" val s3 = "/objects(1)" 我需要提取子字符串对象,而不考虑任何可能的前缀和后缀。如果字符串总是以斜杠开头,以(N)结尾,那么最简单的解决方案是 scala> s3.substring(1).substring(0, s3.indexOf("(") - 1) res1: String = objects 如何始终使用正则表达式提取
val s0 = "objects"
val s1 = "/objects"
val s2 = "/objects(0)"
val s3 = "/objects(1)"
我需要提取子字符串对象
,而不考虑任何可能的前缀和后缀。如果字符串总是以斜杠开头,以(N)
结尾,那么最简单的解决方案是
scala> s3.substring(1).substring(0, s3.indexOf("(") - 1)
res1: String = objects
如何始终使用正则表达式提取字符串
对象
(我想这就是方法)您可以使用下面的正则表达式并从组索引1中获取所需的字符串
^\/?(.*?)(?=(?:\(\d*\))?$)
您可以使用下面的正则表达式,从组索引1中获取所需的字符串
^\/?(.*?)(?=(?:\(\d*\))?$)
以下是另一种方法:
val pattern = """.*/(objects)\(\d+\).*""".r
val data = Seq("objects", "/objects", "/objects(0)", "/objects(1)")
val results = data.map{
case pattern(obj) => obj
case _ => "-"
}
Scala REPL:
results: Seq[String] = List(-, -, objects, objects)
以下是另一种方法:
val pattern = """.*/(objects)\(\d+\).*""".r
val data = Seq("objects", "/objects", "/objects(0)", "/objects(1)")
val results = data.map{
case pattern(obj) => obj
case _ => "-"
}
Scala REPL:
results: Seq[String] = List(-, -, objects, objects)
了解分隔字符可以使用
dropWhile
和takeWhile
;为了
val in = Seq("objects", "/objects", "/objects(0)", "/objects(1)")
然后
如前所述,带有分组的正则表达式在其他方面更加健壮、可扩展和通用。了解分隔字符允许使用
dropWhile
和takeWhile
;为了
val in = Seq("objects", "/objects", "/objects(0)", "/objects(1)")
然后
如前所述,使用分组的正则表达式更健壮、更具可扩展性和通用性。您实际上想做什么?如果您知道要提取的确切字符串,那么为什么需要提取它呢?您是否只想检查字符串是否包含子字符串
对象?这只是一个示例,说明我需要提取/
和(N)
(/
和(N)之间的字符串
可能存在也可能不存在)。您实际上想做什么?如果您知道要提取的确切字符串,那么为什么需要提取它呢?您是否只想检查字符串是否包含子字符串对象?这只是一个示例,说明我需要提取/
和(N)
(/
和(N)之间的字符串
可能存在也可能不存在)。