Scala 正则表达式使用符号填充数据


val strList = List("point+100", "point-100")
val pattern = """w+""".r
println(strList.map(pattern.findAllIn(_).toList))```

实际输出:列表(列表(点,100),列表(点,100)) 预期输出 : 列表(列表(点, +100), 列表(点, -100))

想知道为什么它没有提供预期的输出以及如何实现它..?

您没有得到预期的输出,因为+/-不是单词字符w,您可以在+/-之前使用展望(?=) 语法进行拆分:

strList.map(_.split("(?=[+-])"))
// res84: List[Array[String]] = List(Array(point, +100), Array(point, -100))

或者,您可以在w+前面添加+/-符号,并将其设置为可选,这样它将提取单词及其前面的+/-符号(如果存在):

val pattern = """[+-]?w+""".r
// pattern: scala.util.matching.Regex = [+-]?w+
println(strList.map(pattern.findAllIn(_).toList))
// List(List(point, +100), List(point, -100))

更好的是,您只能在数字前面添加+-

val strList = List("point+100", "point-100", "point100")
val pattern = """[a-zA-Z]+|[+-]?d+""".r
// pattern: scala.util.matching.Regex = [a-zA-Z]+|[+-]?d+
println(strList.map(pattern.findAllIn(_).toList))
// List(List(point, +100), List(point, -100), List(point, 100))

最新更新