Scala: Соответствие дополнительным группам Регулярного выражения

Я пытаюсь соответствовать на группе опции в (бете 1) Scala 2.8 со следующим кодом:

import scala.xml._

val StatementPattern = """([\w\.]+)\s*:\s*([+-])?(\d+)""".r

def buildProperty(input: String): Node = input match {
    case StatementPattern(name, value) => <propertyWithoutSign />
    case StatementPattern(name, sign, value) => <propertyWithSign />
}

val withSign = "property.name: +10"
val withoutSign = "property.name: 10"

buildProperty(withSign)        // <propertyWithSign></propertyWithSign>
buildProperty(withoutSign)     // <propertyWithSign></propertyWithSign>

Но это не работает. Что корректный путь состоит в том, чтобы соответствовать дополнительным regex группам?

14
задан BefittingTheorem 17 March 2010 в 10:31
поделиться

2 ответа

Необязательная группа будет иметь значение null, если она не найдена, поэтому вам нужно включить "null" в сопоставление с образцом:

import scala.xml._

val StatementPattern = """([\w\.]+)\s*:\s*([+-])?(\d+)""".r

def buildProperty(input: String): Node = input match {
    case StatementPattern(name, null, value) => <propertyWithoutSign />
    case StatementPattern(name, sign, value) => <propertyWithSign />
}

val withSign = "property.name: +10"
val withoutSign = "property.name: 10"

buildProperty(withSign)        // <propertyWithSign></propertyWithSign>
buildProperty(withoutSign)     // <propertyWithSign></propertyWithSign>
20
ответ дан 1 December 2019 в 13:08
поделиться

Я не вижу никаких проблем с вашим regex. Хотя вам не нужно экранировать . в классе char.

EDIT:

Вы можете попробовать что-то вроде:

([\w.]+)\s*:\s*((?:+|-)?\d+)

Чтобы перехватить имя и значение, где значение может иметь необязательный знак.

0
ответ дан 1 December 2019 в 13:08
поделиться
Другие вопросы по тегам:

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