Задача — сопоставить запятую в выражении, исключая случаи, когда запятая стоит после цифры или пробела.
Для таких тестовых случаев регулярное выражение должно соответствовать запятой:
"a,b"
"a,b,c"
"a,b,c,d"
"a,b,c,d,e1,1"
И для таких:
"ab"
"abc1,1"
не должен совпадать.
Обычно количество элементов, разделенных запятыми, может составлять 8-10.
Регулярное выражение в коде Scala:
private val ContainCommaSeparatorExcludingDigitBeforeComma = """^.*\\D\\s*,.*$""".r
В частности
^.*\\D\\s*,.*$
работает нормально. Я это проверил, например, на том сервисе https://regex101.com
Но мой код Scala с сопоставлением шаблонов не работает.
address match {
case ContainCommaSeparatorExcludingDigitBeforeComma(_, _, _) => print("found")
case _ => print("not found")
}
Что я делаю не так?





ContainCommaSeparatorExcludingDigitBeforeComma(_, _, _) на ContainCommaSeparatorExcludingDigitBeforeComma(), поскольку группы не определены, поэтому нечего деструктурировать.object Main extends App {
val ContainCommaSeparatorExcludingDigitBeforeComma = """^.*\D\s*,.*$""".r
val inputs = List("a,b", "a,b,c", "a,b,c,d", "a,b,c,d,e1,1", "ab", "abc1,1")
inputs.foreach { input =>
input match {
case ContainCommaSeparatorExcludingDigitBeforeComma() => println("found")
case _ => println("not found")
}
}
}
И пример с группами и сопоставлением шаблонов, если вы этого хотели (1 группа, извлечение \D)
object Main extends App {
val ContainCommaSeparatorExcludingDigitBeforeComma = """^.*(\D)\s*,.*$""".r
val inputs = List("a,b", "a,b,c", "a,b,c,d", "a,b,c,d,e1,1", "ab", "abc1,1")
inputs.foreach { input =>
input match {
case ContainCommaSeparatorExcludingDigitBeforeComma(m) => println(s"found '$m'")
case _ => println("not found")
}
}
}
Должно ли оно соответствовать
1 ,bили1,,b?