[FIXED] scala regex erhält alle String-Matching-Eingaben

Ausgabe

Ich habe unter Scala-Funktion.

def getMatchesFor(input: String, matchId: String): List[String] = {
  val regex = s"""${matchId}_\w*""".r
  (regex findAllIn input).toList
}

Was ist der Erwartungswert der Funktion?

  val input = "abc_1_1_1_0abc_1_0_1"
  val result = getMatchesFor(input, "abc")

resultsollte seinList("abc_1_1_1_0", "abc_1_0_1")

Ich habe es bisher versucht, val r = s"${matchId}_\\w*".raber es funktioniert nicht wie erwartet.

Wie kann ich dieses Problem beheben?

Lösung

Hier ist eine Regex, die Ihren Anforderungen entspricht:

val regex = s"${matchId}_\\w*?((?=${matchId})|\\W|$$)".r

\w*muss keiner gierig sein, sonst würde einfach alles passen. Es sollte nur übereinstimmen, bis gefolgt von:

  • die nächste matchIdmit einem Lookahead(?=${matchId})
  • ein Nicht-Wort-Zeichen\W
  • oder das Zeilenende$

Ein alternativer Ansatz könnte darin bestehen, die Zeichenfolge einfach mit aufzuteilen und die verbleibende Übereinstimmung aus den Teilen zu matchIdextrahieren (wobei die erste Teilung ignoriert wird)._\w*


Beantwortet von –
Moritz


Antwort geprüft von –
Clifford M. (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like