2017-09-25 116 views
1
  1. 與lineSequence開始
  2. 我想測試一個正則表達式匹配,如果是,率先拿到賽
  3. 此外,我想從正則表達式匹配返回捕獲組

如果我不在乎,我會在線序上做一個「第一個」,如果存在,重新運行正則表達式。Kotlin:如何獲得匹配的第一行的捕獲組?

val possibleMatch = input.lineSequence().first { myRegex.matches(it) } 

...但我想成爲kotlin酷,不必重新運行正則表達式。我應該使用地圖到MatchGroup並篩選出空值嗎?感覺更詳細的比它可能是......

input.lineSequence() 
.mapNotNull { myRegex.find(it) } 
.map { it.groupValues[1] } 
.first() 
+0

它可能會感覺更詳細,但你的意圖似乎很清楚(主觀,是)。 – Todd

回答

1

你可以把它簡化爲單一.mapNotNull { ... }

input.lineSequence() 
    .mapNotNull { regex.find(it)?.groupValues?.get(1) } 
    .first() 

如果.find(it)回報null,該值仍然會從序列下降,否則將在同一個電話中處理。