我需要找到所有用“和”字加入的单词对。
到目前为止,我尝试了以下内容:
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?)
但是,正如你所看到的,没有成功......
答案 0 :(得分:3)
你的正则表达式
.*?(\w+\W+)and(\W+\w+).*
由于。*之前和之后,已经匹配所有内容。将其更改为(或根据要求类似):
(\w+\W+)and(\W+\w+)
答案 1 :(得分:0)
如上所述,要将结果作为元组列表获取,您可以执行以下两项操作:
将你的正则表达式改为不那么贪心,即不立刻消耗整个字符串 例如:
""".(\w+) and (\w+)""".r
使用 findAllIn 并在所有匹配项上使用RegexExtractor来获取捕获的parantheses中的部分
将所有内容放在一起产生所需结果的解决方案可能如下所示:
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))