这是我的代码:
object test extends App {
private val PLAYER_REGEX = """[\s\S]*(?:<td class="align-middle plus-size"> <s class="text-muted">|<td class="align-middle plus-size">)(.*)(?:</s> </td></tr>|</td></tr>)""".r
val str ="""<td class="align-middle plus-size"> <s class="text-muted">first</s> </td></tr>"""
val str2 ="""<td class="align-middle plus-size">second</td></tr>"""
private def find(str:String) = {
PLAYER_REGEX.findFirstMatchIn(str) match {
case Some(data) => data.group(1).trim
case None => "Not found"
}
}
println(find(str))
println(find(str2))
}
输出
first</s>
second
我的问题是 - 为什么那些多余的
</s>
在第一种情况下?我以为
(?:</s> </td></tr>|</td></tr>)
应选择首次出现
</s> </td></tr>
但看起来像是选择
</td></tr>???
当然我可以修剪它,但它看起来很难看。 如果你能提供另一个正则表达式,我也会很高兴:)
答案 0 :(得分:0)
事先由这个贪婪的量词引起:
…(.*)…
相反,请使用懒惰版本:
…(.*?)…