2017-06-04 16 views
0

例如:如何從字符串中提取號碼,如果我知道,當其開始並在其完成

我有以下字符串

"somestringthatcanbeanything theStringBeforeTheNumber20.47theStringAfterTheNumber somestringthatcanbeanything" 

所以數量始終

theStringBeforeTheNumber{number}theStringAfterTheNumber 
之間

我想要從整個字符串中提取數字,我該怎麼做?即時通訊使用scala我的正則表達式應該如何? val myRgx: Regex = """myRegexGoesHere""".r

+1

什麼語言或工具,您使用的? –

+0

@TimBiegeleisen im使用scala –

回答

1

您可以使用您的建議圖案,略作修改爲:

val string = "theStringBeforeTheNumber20.47theStringAfterTheNumber" 
val pattern = """theStringBeforeTheNumber(.*?)theStringAfterTheNumber""".r 
pattern.findAllIn(string).matchData foreach { 
    m => println(m.group(1)) 
} 

數量括號(.*?)是捕獲組,它採用的是懶點。這表示匹配第一個字符串和第二個字符串的第一個匹配項之間的所有內容。我們在代碼片段中打印出第一個捕獲組。

+0

完美的人,謝謝 –

1

如果你知道開始和結束的字符串,我認爲最好做一個substring(),因爲通常regexp是昂貴的。 例如 substring(indexOf(theStringBeforeTheNumber)+ length(theStringBeforeTheNumber),indexOf(theStringAfterTheNumber)) 您還必須考慮初始字符串和最終字符串是否等於索引,在這種情況下您需要進行一些額外的計算。 希望得到這個幫助。

1

下面是使用正則表達式的另一種方法以及檢驗所提取的數目:

import scala.util.Try 

val s = "somestringthatcanbeanything theStringBeforeTheNumber20.47theStringAfterTheNumber somestringthatcanbeanything" 

val pattern = """.*?theStringBeforeTheNumber([0-9.-]*)theStringAfterTheNumber.*""".r 

val number: Double = s match { 
    case pattern(num) => Try(num.toDouble).getOrElse(-999) 
    case _ => -999 
} 
number: Double = 20.47 
相關問題