我已經低于 scala 函式。
def getMatchesFor(input: String, matchId: String): List[String] = {
val regex = s"""${matchId}_\w*""".r
(regex findAllIn input).toList
}
函式的期望是什么
val input = "abc_1_1_1_0abc_1_0_1"
val result = getMatchesFor(input, "abc")
result應該List("abc_1_1_1_0", "abc_1_0_1")
到目前為止我已經嘗試過,val r = s"${matchId}_\\w*".r但它沒有按預期作業。
我該如何解決這個問題?
uj5u.com熱心網友回復:
這是一個符合您需求的正則運算式:
val regex = s"${matchId}_\\w*?((?=${matchId})|\\W|$$)".r
\w*必須不貪心,否則它將匹配所有內容。它應該只匹配直到后面跟著:
- 下一個
matchId使用前瞻(?=${matchId}) - 非單詞字符
\W - 或行尾
$
另一種方法可能是簡單地使用拆分字串matchId并從部分中提取剩余的匹配_\w*項(忽略第一個拆分)。
uj5u.com熱心網友回復:
使用拆分和正向前瞻的另一種選擇。
查看拆分的位置。
def getMatchesFor(input: String, matchId: String): List[String] = {
val regex = s"""(?=${matchId}_)""".r
regex.split(input).toList
}
輸出
List(abc_1_1_1_0, abc_1_0_1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/515729.html
標籤:正则表达式斯卡拉
