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))