2017-09-25 6 views
1
  1. 私は正規表現がマッチするかどうかをテストしたいと、そうであれば、さらに
  2. 最初の試合を取得したいlineSequence
  3. を開始し、私は正規表現の一致
  4. からのキャプチャグループを返したいのですが

私が気にしなかったならば、私はlineSequenceで "first"を行い、もし存在すれば、正規表現を再実行します。Kotlin:一致する最初の行のキャプチャグループを取得する方法は?

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

...でも、私はkotlin-coolで正規表現を再実行する必要はありません。 MatchGroupにマップを使用してヌルをフィルタリングする必要がありますか?それはそう

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

.find(it)もし戻っnull、値がまだシーケンスから削除されます、そして:

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

もっと冗長に感じるかもしれませんが、あなたの意図は私にとって非常に明確です(主観的、はい)。 – Todd

答えて

1

はあなたが.mapNotNull { ... }を選抜するためにそれを簡素化することができます...それができるよりも、より冗長に感じています同じ呼び出しで処理されます。

関連する問題