下面的代码是我用来解析文件中的href链接:
def parseFile(){
val source = scala.io.Source.fromFile("C:\\Users\\Adrian\\Desktop\\parsefile.txt")
val lines = source.getLines
val Pattern = "\\s*(?i)href\\s*=\\s*(\\\"([^\"]*\")|'[^']*'|([^'\">\\s]+))"
for (line <- source.getLines) {
println(line)
line match {
case Pattern(c) => println(c)
case _ => None
}
}
source.close ()
}
parsefile中的一个示例行:
<A HREF="www.google.com" title="test">test</A>
但是我收到了这个Eclipse编译时错误:
Multiple markers at this line
- not found: value c
- value Pattern is not a case class constructor, nor does it have an unapply/unapplySeq method
如何声明'c'以访问捕获组String?
我的代码基于此问题的接受答案:
How to pattern match using regular expression in Scala?使用的代码是:
val Pattern = "([a-cA-C])".r
word.firstLetter match {
case Pattern(c) => c bound to capture group here
case _ =>
}
有关解析文件欢迎的替代方法的任何建议。
答案 0 :(得分:5)
您的代码之间存在显着差异:
val Pattern = "\\s*(?i)href\\s*=\\s*(\\\"([^\"]*\")|'[^']*'|([^'\">\\s]+))"
和示例:
val Pattern = "([a-cA-C])".r
注意结尾.r
。这会将String转换为正则表达式模式。正则表达式模式有一个unaplySeq方法,因此它适用于模式匹配。
答案 1 :(得分:2)
Pattern
的类型为String
,但应为Regex
。只需将.r
的调用添加到您的模式字符串中即可。