匹配分隔符分隔值并省略第一行与标题

时间:2016-05-06 19:56:10

标签: regex csv

我不熟悉正则表达式,我从.dsv文件中匹配所有由半列分隔的值,如下所示:

(.*?);(.*?);(\d+.*)

但是,我想跳过包含标题名称的第一行。我想出了类似于第一行的东西(或者我认为它确实如此):

(?!\A)^.*\z)

我想以某种方式结合两个正则表达式,并确保分隔符分隔值匹配不会涉及第一行,但我不确定如何去做。

非常感谢你的帮助,

编辑:  我正在使用Java语法进行正则表达式

2 个答案:

答案 0 :(得分:1)

您可以使用

(?m)(?!\A)^(.*?);(.*?);(\d+.*)

请参阅regex demo

(?!\A)否定前瞻将使^匹配所有行的开头(不是使用(?m)内联多行修饰符后的整个字符串),这不是第一行。

答案 1 :(得分:0)

对于使用NiFi的人,您还可以决定通过ExecuteScript运行脚本我编写了一个简单的Groovy脚本,在匹配分隔符分隔值后,在独立步骤中跳过第一行:

import org.apache.nifi.processor.io.StreamCallback
import java.nio.charset.StandardCharsets

def flowFile = session.get()
if (!flowFile) return

flowFile = session.write(flowFile, { inputStream, outputStream ->
    inputStream.eachLine { line, number ->
        if (number == 1)
            return
            outputStream.write(line.toString().getBytes(StandardCharsets.UTF_8))
        }
} as StreamCallback)

session.transfer(flowFile, REL_SUCCESS)