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)之间的字符串
可能存在也可能不存在)。