val strList = List("point+100", "point-100")
val pattern = """\w+""".r
println(strList.map(pattern.findAllIn(_).toList))```
實際輸出:列表(列表(點,100),列表(點,100)) 預期輸出:列表(列表(點,100),列表(點, -100))階正則表達式來與符號填充數據
想知道爲什麼它沒有給出預期的輸出,我該如何實現它?
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))
Thanks @Psidom。我的用例有更復雜的場景。 讓我們再添加一個case到strList =「point100」,其中預期輸出爲List(List(point,+100),List(point,-100),List(point,100)) –
嘗試最後一種方法。不知道你有多複雜的情況。但如果你的字符串是模式*字母* + *數字*與可選的+/-符號,這應該工作。 – Psidom
再增加一個場景strList => 「point100」 有望O/P :表(表(點+100),列表(point,-100),List(point,100)) –