2017-09-25 7 views
1
  1. 내가 정규식 일치하는 경우 테스트, 그리고 그렇다면하면,
  2. 또한 첫 경기를 얻을 것, 그 정규식 매치에서 캡처 그룹을 반환하고 싶습니다

내가 신경 쓰지 않는다면, 나는 lineSequence에서 "first"를하고, 존재한다면, regex를 다시 실행하십시오.Kotlin : 일치하는 첫 번째 줄의 캡처 그룹을 얻는 방법? lineSequence 시작

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

...하지만 kotlin-cool이고 regex를 다시 실행할 필요가 없습니다. MatchGroup에 맵을 사용하고 널 (null)을 필터링해야합니까?

가 가
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는, 값이 여전히 순서에서 제외되며, 그렇지 않은 경우를 동일한 통화에서 처리됩니다.