0

「and」という単語で結合されたすべての単語のペアを見つける必要があります。

これまでのところ、次のことを試しました。

val salute = """.*?(\w+\W+)and(\W+\w+).*""".r

val salute(a,b) = "hello ladies and gentlemen, mesdames and messieurs, how are you?"
a: String = "ladies "
b: String = " gentlemen"

今、私はこのようなものが欲しいです:

salute.findAllMatches("hello ladies and gentlemen, mesdames and messieurs, how are you?")
List[(java.lang.String, java.lang.String)] = List((ladies,gentlemen), (mesdames,mesieurs))

で試しました

salute.findAllIn("hello ladies and gentlemen, mesdames and messieurs, how are you?").toList
res14: List[String] = List(hello ladies and gentlemen, mesdames and messieurs, how are you?)

しかし、ご覧のとおり、成功せずに...

4

2 に答える 2

3

あなたの正規表現

.*?(\w+\W+)and(\W+\w+).*

前後に .* があるため、すでにすべてに一致します。次のように変更します (または要件に基づいて同様に):

(\w+\W+)and(\W+\w+)
于 2012-11-06T13:49:42.940 に答える
0

上記のようにタプルのリストとして結果を取得するには、次の 2 つのことを行うことができます。

正規表現をあまり貪欲にならないように変更します。つまり、文字列全体を一度に消費しないようにします。例:

""".(\w+) and (\w+)""".r

findAllInを使用し、すべての一致で RegexExtractor を使用して、キャッチ括弧内の部分を取得します

望ましい結果を生み出すソリューションにすべてをまとめると、次のようになります。

val salute = """.(\w+) and (\w+)""".r
val string = "hello ladies and gentlemen, mesdames and messieurs, how are you?"

val results = for {
  salute(left,right) <- (salute findAllIn string)
} yield (left,right)

println(results toList)

結果は

List((ladies,gentlemen), (mesdames,messieurs))
于 2012-11-07T15:30:26.010 に答える