Scala Список соответствия регулярных выражений на карте и ключ возврата - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу сопоставить строку со списком регулярных выражений в пределах Map[String, List[Regex]] и вернуть key[String] в виде строки в случае совпадения.

например:

 //Map[String, List[Regex]]

 Map(m3 -> List(([^ ]*)(rule3)([^ ]*)), m1 -> List(([^ ]*)(rule1)([^ ]*)), m4 -> List(([^ ]*)(rule5)([^ ]*)), m2 -> List(([^ ]*)(rule2)([^ ]*)))

если строка "***rule3****", она должна вернуть мне ключ "m3", аналогично, если строка "****rule5****", она должна вернуть ключ "m4".

Как мне это реализовать?

то, что я пробовал, что не работает

rulesMap.mapValues (y => y.par.foreach (x => x.findFirstMatchIn("description"))).keys.toString()

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Для Scala 2.13.x

rulesMap
  .filter({ case (_, regexList) => regexList.exists(regex => regex.matches("yourString")) })
  .keys

Для Scala 2.12.x

rulesMap
  .filter({ case (_, regexList) => regexList.exists(regex => regex.findFirstIn("yourString").isDefined) })
  .keys
0 голосов
/ 06 февраля 2020

collect - лучший способ как фильтрации, так и отображения коллекции, потому что она только один раз передает данные.

def findKeys(s: String) =
  rulesMap.collect {
    case (key, exps) if exps.exists(_.findFirstIn(s).nonEmpty) => key
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...