scala正则匹配

osh3o9ms  于 2023-04-21  发布在  Scala
关注(0)|答案(1)|浏览(97)

所有scala noob问题
我使用下面的代码来匹配regex到文件的第一行以识别文件类型-基本上,它匹配直到一个工作-我们无法控制文件名t/f am使用regex
然而,对于avro文件,第一行以“Obj(ctl-a)(ctl-f)(ctl-v)avro.schema”开始.....但是下面注解的(!!!)正则表达式无法匹配,所以我使用通用的“.”匹配来使其工作,但不明白为什么会失败
我还包括od -cxa输出的文件与ctl字符在偏移3,4,5从位置0
感谢您的任何意见,感谢您在这方面的时间,先生

val stream:FSDataInputStream = fs.open(filePath)
        val bufferReader             = new BufferedReader(new InputStreamReader(stream))
        var lineTxt1:String          = bufferReader.readLine()
        var lineTxt2:String          = bufferReader.readLine()
 
        logger.info(lineTxt1)
//!!! doesn't work:  val pattern_avro     = "^Obj#010616avro.schema".r.unanchored
        val pattern_avro             = "^Obj...avro.schema".r.unanchored
        val pattern_orc              = "^ORC".r.unanchored
        val pattern_parquet          = "^PAR".r.unanchored
        lineTxt1 match {
          case pattern_avro()        => "AVRO"
          case pattern_orc()         => "ORC"
          case pattern_parquet()     => "PAR"
          case _                     => "TEXT"
        }

对于示例avro文件,$(od -cxa)输出:

0000000   O   b   j soh ack syn   a   v   r   o   .   s   c   h   e   m
          O   b   j 001 006 026   a   v   r   o   .   s   c   h   e   m
           624f    016a    1606    7661    6f72    732e    6863    6d65
0000020   a   , enq   {   "   t   y   p   e   "   :   "   r   e   c   o
          a 254 005   {   "   t   y   p   e   "   :   "   r   e   c   o
h9a6wy2h

h9a6wy2h1#

我不知道#010616是什么,但下面的正则表达式应该可以工作:

"""^Obj\cA\cF\cVavro.schema""".r.unanchored

相关问题