给出一个像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
方法来做到这一点,但是有没有办法使用正则表达式呢?
答案 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'