2017-01-03 24 views
0

文字列のシーケンスを個々のトークンに解析したいと思います。今すぐ最初の単語だけを解析します。今、私は取得していますスカラ文字列の解析

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]は解析された:これは変数の文字列の長さのために働くように、ジョニー

はどのようにして、個々のトークンに文字列全体を解析することができます。

この作品を作成するためのあらゆる指針を歓迎します。どうやってスカラで動かせるか教えてください。

+0

どのように私は大文字で私たちの言葉をフィルタリングすることができますか?定義を "" "[AZ] +" ""。rに変更しようとしましたが、文字列 "LABEL text"の最初の単語と一致し、&&に使用されます。 – kromastorm

+0

Javaではこのコードは 'public class RegexExample { パブリック静的無効メイン(文字列[] args){ のString = "ラベルテキストを印刷するAND &&"; パターンp = Pattern.compileに使用される(" [AZ] + "); 整合M = p.matcher(S); 一方(m.find()){ のSystem.out.println(m.group());} }}どのように同じ結果を得ることができスカラ? – 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は小さな子羊を持っています ")foreach {println} これでも動作します。 – BDR

+0

返事をありがとう。大文字で文字列をフィルタリングする必要がある場合は、何を変更する必要がありますか? – kromastorm

+0

"" "[A-Z] +" "" .r。この正規表現は大文字の文字列をフィルタリングします。 – BDR