2015-06-14 47 views
0

串提取相同子...斯卡拉:如何走出總是從不同的前綴和/或給予下列字符串後綴

val s0 = "objects" 
val s1 = "/objects" 
val s2 = "/objects(0)" 
val s3 = "/objects(1)" 

我需要提取子objects,無論任何可能的前綴和後綴。如果字符串總是開始以斜線與(N)結束,那麼最簡單的解決辦法是

scala> s3.substring(1).substring(0, s3.indexOf("(") - 1) 
res1: String = objects 

我怎麼總是提取字符串objects用正則表達式(我想這是要走的路)?

+1

你究竟在做什麼?如果你知道你想要提取的確切字符串,爲什麼你需要提取它呢? –

+1

你只是想檢查一個字符串是否包含子對象'objects'? – dcastro

+0

只是一個例子來解釋我需要提取'/'和'(N)'('/'和'(N)'之間的字符串可能會或可能不會出現)。 – j3d

回答

2

你可以使用下面的正則表達式,並讓你從組索引1

^\/?(.*?)(?=(?:\(\d*\))?$) 

DEMO

2

這裏希望字符串是另一種方式來做到這一點:

val pattern = """.*/(objects)\(\d+\).*""".r 

val data = Seq("objects", "/objects", "/objects(0)", "/objects(1)") 

val results = data.map{ 
    case pattern(obj) => obj 
    case _ => "-" 
} 

斯卡拉REPL :

results: Seq[String] = List(-, -, objects, objects) 
1

瞭解分隔符允許使用dropWhiletakeWhile;對於

val in = Seq("objects", "/objects", "/objects(0)", "/objects(1)") 

然後

in.map(i => i.dropWhile(_ == '/').takeWhile(_ != '(')) 
List(objects, objects, objects, objects) 

的正則表達式與作爲已經建議分組證明更健壯,可擴展性和一般否則。

相關問題