2014-12-05 44 views
1

一個字符串,我有這樣的模式:斯卡拉 - 解析與可選的比賽

val smilepattern = "([:]) ([-]) ([) | | | (])".r 
val smilepattern(colon, dash, arc) = ": - |" 
println(colon + dash + arc) 

我的目的是要託運三smiles的建築,但我怎麼可以說dash ([-])是可選的?因爲,smile可以是:-):) ???

回答

3

可以通過在正則表達式中使用?來使事情可選。

scala> ": )".matches("([:]) ([-]?) ([) | | | (])") 
res1: Boolean = true 

scala> ": -)".matches("([:]) ([-]?) ([) | | | (])") 
res2: Boolean = true 
+0

很好,但它需要':(space space)'之間有2個'空格''。我明白爲什麼,但我的應用程序將使用這種模式不會生成空格,以防''dash'丟失。謝謝 – Valerin 2014-12-05 09:27:11

+0

我該怎麼說:'如果(缺少短劃線)val sml = signs.mkString(「(double spaces)」)。trim else sml = signs.mkString(「(single space)」)trim' – Valerin 2014-12-05 11:19:14

+0

可能類似於val sml = if(破折號缺失)signs.mkString(「(double spaces)」)。trim else sign.mkString(「(single space)」)。trim – mohit 2014-12-05 20:01:38