代码之家  ›  专栏  ›  技术社区  ›  KayV

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

  •  0
  • KayV  · 技术社区  · 6 年前

    我正在学习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)
    

    代码运行良好,但看起来有点奇怪,可读性较差。

    在斯卡拉还有别的办法吗?或者其他我可以使用的语法?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Wiktor Stribiżew    6 年前

    提取数字的模式匹配方式非常耗费资源:因为模式必须匹配整个字符串,所以必须添加 .* 在regex的两端,这会触发很多回溯。您还添加了一个空格以确保第一个 不要吃掉左边的所有数字并返回找到的所有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 .

    推荐文章