gpt4 book ai didi

regex - 检查正则表达式模式匹配是否失败

转载 作者:行者123 更新时间:2023-12-01 10:25:32 24 4
gpt4 key购买 nike

我正在研究一个在字符串开头提取数字的函数。给定一个字符串,它应该返回一个案例类 Success(包含 Int 中提取的数字和字符串的其余部分),以防它在开头找到一个数字和一个案例否则对象失败

为此,我使用正则表达式模式匹配将数字和字符串的其余部分匹配到两个单独的变量中。然后我将数字转换为 Int 并返回。

问题:当提供的字符串开头不包含数字时,模式匹配失败但我不知道如何检测它失败,以及何时返回我的失败。

有什么想法吗?

这是我的代码

sealed trait Result
case class Success(expr: String, result: Int) extends Result
case object Failure extends Result

def extractNumber(str: String) : Result = {
val pattern = "([0-9]+)(.*)".r
val pattern(count, rest) = str
if (pattern match failed) //How can I do that
return Failure
val number = count.toInt
return Success(rest, number)
}

extractNumber("100banana") match {
case Success(rest, nb) => println("sucess" + nb + ";" + rest)
case Failure => println("failure")
}

最佳答案

您可以安全地对字符串进行模式匹配,并在模式匹配时提取所需的信息。

在下面的pattern 中可以用作提取器。阅读有关 Scala 提取器模式的信息。

def extractNumber(str: String) : Result = {
val pattern = "([0-9]+)(.*)".r
str match {
case pattern(a, b) => Success(b, a.toInt)
case _ => Failure
}
}

让我们检查它是否适用于 Scala repl

scala> :paste
// Entering paste mode (ctrl-D to finish)

sealed trait Result
case class Success(expr: String, result: Int) extends Result
case object Failure extends Result

def extractNumber(str: String) : Result = {
val pattern = "([0-9]+)(.*)".r
str match {
case pattern(a, b) => Success(b, a.toInt)
case _ => Failure
}
}

// Exiting paste mode, now interpreting.

defined trait Result
defined class Success
defined object Failure
extractNumber: (str: String)Result

scala> extractNumber("123192731qwlejqwlkje")
res0: Result = Success(qwlejqwlkje,123192731)

看起来是可行的

让我们检查一下在失败的情况下会发生什么。

scala> extractNumber("qwlejqwlkje")
res1: Result = Failure

关于regex - 检查正则表达式模式匹配是否失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com