val strList = List("point+100", "point-100")
val pattern = """\w+""".r
println(strList.map(pattern.findAllIn(_).toList))```
实际输出:列表(列表(点,100),列表(点,100)) 预期输出:列表(列表(点,+ 100),列表(点,-100))
想知道为什么它没有给出预期的输出,我怎样才能实现它??
答案 0 :(得分:0)
您没有得到预期的输出,因为 +/- 不是单词字符\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))