我有下面的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
,但它并没有像预期的那样工作。
我如何解决此问题?
2条答案
按热度按时间fbcarpbf1#
下面是一个符合您需求的正则表达式:
\w*
必须不是贪婪的,否则它将匹配所有内容。它应该只匹配,直到后面跟上:matchId
使用前视(?=${matchId})
\W
$
另一种方法可能是简单地使用
matchId
拆分字符串,并从各个部分中提取剩余的匹配_\w*
(忽略第一次拆分)。nbnkbykc2#
另一种选择是使用拆分和积极的前瞻。
有关拆分,请参见the positions。
输出