Scala regex在第一个连字符和整个字符串之前获取字符串

时间:2019-03-13 21:51:33

标签: regex scala

给出一个像abab/docId/example-doc1-2019-01-01这样的字符串,我想使用Regex提取这些值:

firstPart = example
fullString = example-doc1-2019-01-01

我有这个:

import scala.util.matching.Regex

case class Read(theString: String) {

  val stringFormat: Regex = """.*\/docId\/([A-Za-z0-9]+)-([A-Za-z0-9-]+)$""".r

  val stringFormat(firstPart, fullString) = theString

}

但这是这样分开的:

firstPart = example
fullString = doc1-2019-01-01

是否可以保留fullString并对其进行正则表达式以在第一个连字符之前获取部分?我知道我可以使用String split方法来做到这一点,但是有没有办法使用正则表达式呢?

1 个答案:

答案 0 :(得分:0)

您可以使用

val stringFormat: Regex = ".*/docId/(([A-Za-z0-9])+-[A-Za-z0-9-]+)$".r
                                    ||_ Group 2 _|               |
                                    |                            |
                                    |_________________ Group 1 __|

请参见regex demo

请注意如何重新排列捕获括号。另外,您需要在regex匹配调用中交换变量,请参见下面的演示(fullString应该位于firstPart之前)。

请参见Scala demo

val theString = "abab/docId/example-doc1-2019-01-01"
val stringFormat = ".*/docId/(([A-Za-z0-9]+)-[A-Za-z0-9-]+)".r
val stringFormat(fullString, firstPart) = theString
println(s"firstPart: '$firstPart'\nfullString: '$fullString'")

输出:

firstPart: 'example'
fullString: 'example-doc1-2019-01-01'