如何在Scala中使用正则表达式?

时间:2019-03-07 08:59:02

标签: regex scala

我正在学习Scala和spark,希望将数字弄乱。 为此,我正在使用正则表达式。并了解了在Scala中使用常规模式的怪异签名。

这是我的代码:

val myString: String = "there would be some number here 34."
val pattern = """.* ([\d]+).*""".r  
val pattern(numberString) = myString
val num = numberString.toInt
println(answer)

代码工作正常,但似乎有点怪异且可读性差。

在Scala中还有其他方法可以这样做吗?还是我可以使用的任何其他语法?

1 个答案:

答案 0 :(得分:2)

提取数字的模式匹配方式非常消耗资源:由于模式必须匹配整个字符串,因此必须在正则表达式的两端添加.*,这会触发大量回溯。您还添加了一个空格,以确保第一个.*不会吃掉左侧的所有数字,并返回找到的所有1+个数字。

如果您要寻找第一场比赛,请使用findFirstIn

val myString: String = "there would be some number here 34."
val numberString = """\d+""".r.findFirstIn(myString)
val num = numberString.get.toInt
println(num) // => 34

请参见Scala demo