regex - Scala - 匹配非空字符串的正则表达式
问题描述
在 Scala 中 - 我需要验证给定的字符串是否为非空。以下代码段返回 true。正则表达式和匹配有什么问题?
def isEmpty(input: String): String = {
val nonEmptyStringPattern = raw"""(\w+)""".r
input match {
case nonEmptyStringPattern => s"matched $input"
case _ => "n/a"
}
}
但是,在下面的匹配方法上,同样的正则表达式可以工作。
def isEmpty(input: String): String = {
val nonEmptyStringPattern = raw"""(\w+)""".r
input match {
case input if nonEmptyStringPattern matches( input) => s"matched $input"
case _ => "n/a" ```.
}
}
这是否意味着匹配不能有正则表达式实例?
解决方案
就像case x => ...
创建一个新变量x
来匹配一样,对于case nonEmptyStringPattern => ...
. 创建了一个新变量,它会隐藏现有的nonEmptyStringPattern
. 而且由于它是一个不受阻碍的变量,它会匹配任何东西。
此外,您已经创建并编译了一个正则表达式模式,但您必须调用它才能对其进行模式匹配。
def isEmpty(input: String): String = {
val nonEmptyStringPattern = "\\w+".r
input match {
case nonEmptyStringPattern() => s"matched $input"
case _ => "n/a"
}
}
String
这现在有效,除了并非所有字符都是\w
单词字符的事实。
isEmpty("") //res0: String = n/a
isEmpty("abc") //res1: String = matched abc
isEmpty("#$#") //res2: String = n/a
推荐阅读
- r - 格式化分面饼图ggplot
- filepond - 如何使用 filepond 获取 exifdata(如 gps)?
- go - go encoding/pem 删除空白字符
- javascript - 如何添加猫鼬事务并创建文档?
- database - Pojo 类中对象列表的 Mybatis 属性映射器错误:spring Boot/mybatis
- kubernetes - Kubernetes v1.21.2:“selfLink 为空,无法引用”
- javascript - 矩阵变量在javascript中未定义
- tensorflow - 使用“tf.compat.v1.metrics.auc”的最佳实践?
- android - 模拟器或物理设备的 AOSP Android 12 Beta2 版本构建失败
- python - 使用 seaborn 创建多条曲线