2017-01-03 3 views
0

Я хочу разобрать последовательность строк в отдельных токенах. Сейчас он только разбирает первое слово.Scala parsing string sequence

class SimpleRegexParser extends RegexParsers{ 

def word: Parser[String] = """[a-z]+""".r ^^ { _.toString } 

} 

object SimpleRegexParserMain extends SimpleRegexParser{ 
def main(args: Array[String]) = { 
println(parse(word, "johnny has a little lamb")) 

} 
} 

Сейчас я получаю: [1,7] разобран: джонни

Как я могу разобрать всю строку на отдельные лексемы, так что это работает для переменной длины строки.

Любые указатели для этой работы приветствуются. Скажите, пожалуйста, как я могу заставить его работать в scala.

+0

Как я могу фильтровать наши слова в верхнем регистре? Попробовал сменить определение на "" "[AZ] +" "". R, но он соответствует только первому слову для строки "Текст LABEL, который будет напечатан И будет использоваться для &&" – kromastorm

+0

В Java этот код работает: 'public class RegexExample { государственной статической силы основных (String []) {арг указатель на строку = "ПОЛЕ текст для печати и будет использоваться для &&"; Pattern р = Pattern.compile (" [AZ] + "); Сличитель м = p.matcher (с); в то время как (m.find()) { System.out.println (m.group());} } }»как можно получить тот же результат scala? – kromastorm

ответ

0

Хорошо. Я нашел ответ на этот вопрос.

Мне пришлось изменить определение слова.

Вот обновленное определение:

class SimpleRegexParser extends RegexParsers{ 

def word: Parser[String] = rep("""[a-z]+""".r) ^^ { _.toString } 

} 

Предыдущее выражение работал одним словом, у меня теперь есть повторение слова респ().

Вот результат:

[1.25] parsed: List(johnny, has, a, little, lamb) 
+0

val regexPattern = "" "[ a-z] + "" ". r regexPattern.findAllIn (" johnny has a lamb "). foreach {println} даже это сработает. – BDR

+0

Спасибо за ответ. Если мне нужно фильтровать строки в верхнем регистре, что я должен изменить? – kromastorm

+0

"" "[A-Z] +" "". это регулярное выражение будет фильтровать строки, которые являются верхним регистром. – BDR