Ich muss alle Übereinstimmungen in einer Zeichenfolge finden, die vordefinierte Token (AB- oder BCC- oder CDD-) oder enthält [AZ] {2,4} -. Vordefinierte Token haben die höchste Priorität. ich meine:Scala Regexp: finde alle Übereinstimmungen in einer Zeichenfolge, die vordefinierte Token oder ein Wort mit 2 bis 4 Zeichen enthalten
regex.findAllIn("XBCC-").toList
muss immer wieder zurückkehren List (bcc-), nicht List (XBCC-)
aber:
regex.findAllIn("XTEST-").toList
muss zurückkehren List (TEST-)
Ich versuche, so etwas wie dass:
val regex = "((AB|BCC|CDD)|[A-Z]{2,4})-".r
Aber es funktioniert nicht richtig
Sie sollten in zwei Schritten tun. Überprüfen Sie zunächst mit den vordefinierten Werten und verwenden Sie dann den generischen Wert. –
Ist es unmöglich in einem regulären Ausdruck zu tun? – user2621486
Nein, das ist mit Scala regex nicht möglich. Siehe [einige Erklärungen hier] (http://stackoverflow.com/questions/35606426/order-of-regular-expression-operator/35606463#35606463), und hier ist eine [verwandte Antwort] (http://stackoverflow.com)/questions/35944441/lazy-quantifier-nicht-arbeiten-wie-ich-würde erwarten/35944635 # 35944635) zeigen, wie Regex-Engine funktioniert. Das ganze Problem ist, dass Ihr Ausdruck nicht links verankert ist und die Engine mit jedem alternativen Zweig an jedem Ort beginnen kann. –