Как я могу получить подгруппы матча в Scala?

У меня в Python есть следующее:

  regex.sub(lambda t: t.group(1).replace(" ", "  ") + t.group(2),string)    

где regex является регулярным выражением, а string является заполненной строкой.

Поэтому я пытаюсь сделать то же самое в Scala, используя функцию regex.replaceAllIn(...) вместо python sub. Однако я не знаю, как получить соответствующие подгруппы.

Есть ли что-то похожее на функцию Python group в Scala?

7 голосов | спросил Cristina HG 4 +03002016-10-04T22:20:37+03:00312016bEurope/MoscowTue, 04 Oct 2016 22:20:37 +0300 2016, 22:20:37

3 ответа


0

У скаладока есть один пример. Предоставьте функцию из Match вместо строки.

scala> val r = "a(b)(c)+".r
r: scala.util.matching.Regex = a(b)(c)+

scala> val s = "123 abcccc and abcc"
s: String = 123 abcccc and abcc

scala> r.replaceAllIn(s, m => s"a${m.group(1).toUpperCase}${m.group(2)*3}")
res0: String = 123 aBccc and aBccc

Полученная строка также выполняет подстановку группы.

scala> val r = "a(b)(c+)".r
r: scala.util.matching.Regex = a(b)(c+)

scala> r.replaceAllIn(s, m => if (m.group(2).length > 3) "$1" else "$2")
res3: String = 123 b and cc

scala> r.replaceAllIn(s, m => s"$$${ if (m.group(2).length > 3) 1 else 2 }")
res4: String = 123 b and cc
ответил som-snytt 5 +03002016-10-05T01:07:16+03:00312016bEurope/MoscowWed, 05 Oct 2016 01:07:16 +0300 2016, 01:07:16
0

Вы можете использовать replaceAll и использовать $n, где «n» - группа, которую вы хотите сопоставить. Например:

yourString.replaceAll(yourRegex, "$1")

Заменяет совпавшие части на первую группу.

ответил Maroun 4 +03002016-10-04T22:25:32+03:00312016bEurope/MoscowTue, 04 Oct 2016 22:25:32 +0300 2016, 22:25:32
0

Может быть, другой способ сделать это - regex, например:

val regExtractor = """a(b+)(c+)(d*)""".r

А затем сопоставьте String:

val string = "abbbbbbbbbccdd"

val newString = string match {
  case regExtractor(g1, g2, g3) =>
    s"""String Replaced: ${g1.replace(g1, "XXXXX")},
        | ${g2.replace(g2, "YYYYY")}""".stripMargin
}

newString будет:

"String Replaced: XXXXX, YYYYY"
ответил ElBaulP 4 +03002016-10-04T23:18:52+03:00312016bEurope/MoscowTue, 04 Oct 2016 23:18:52 +0300 2016, 23:18:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132