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

为了将结果作为您上面描述的元组列表,您可以执行以下两件事:

将您的正则表达式更改为不那么贪婪,即不要一次使用整个字符串例如:

""".(\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 回答