2017-04-21 31 views
0
val strList = List("point+100", "point-100") 
val pattern = """\w+""".r 
println(strList.map(pattern.findAllIn(_).toList))``` 

實際輸出:列表(列表(點,100),列表(點,100)) 預期輸出:列表(列表(點,100),列表(點, -100))階正則表達式來與符號填充數據

想知道爲什麼它沒有給出預期的輸出,我該如何實現它?

+0

再增加一個場景strList => 「point100」 有望O/P :表(表(點+100),列表(point,-100),List(point,100)) –

回答

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

Thanks @Psidom。我的用例有更復雜的場景。 讓我們再添加一個case到strList =「point100」,其中預期輸出爲List(List(point,+100),List(point,-100),List(point,100)) –

+0

嘗試最後一種方法。不知道你有多複雜的情況。但如果你的字符串是模式*字母* + *數字*與可選的+/-符號,這應該工作。 – Psidom