我正在尝试在Scala中为以下用例编写代码:
在文本文件中搜索字符串,仅列出与此字符串匹配的句子。
我尝试使用以下内容:
val fileContents = Source.fromFile("/Users/sc/Documents/Scala_Code/input.txt").getLines.mkString
val sentence = fileContents.filter(line => fileContents.contains("string to search"))
即使有一个匹配项,它也会列出整个文本文件。我只需要匹配的句子。
感谢有人可以提供一些输入。
答案 0 :(得分:1)
我认为很难确保用正则表达式来描述一个句子。不过,这是我的建议:
对于所有句子(如果要对它们进行模式匹配):
"""\A?\b((?!\?+"?|!+"?|\.+)(.|\n))+(\Z|\?+"?|!+"?|\.+)""".r.findAllIn(fileContents.mkString) //.toSeq
对于特定的字符串(例如you
):
"""\A?\b((?!\?+"?|!+"?|\.+)(.|\n))+(\Z|\?+"?|!+"?|\.+)""".r.findAllIn(fileContents.mkString).toIterator.withFilter(_.contains("you")) //.toSeq
toSeq
(或toList
)对于检查少量数据非常有用...
您可以在这里进行测试:https://scalafiddle.io/sf/0znMzyi/8
希望有帮助。