我不熟悉正则表达式,我从.dsv文件中匹配所有由半列分隔的值,如下所示:
(.*?);(.*?);(\d+.*)
但是,我想跳过包含标题名称的第一行。我想出了类似于第一行的东西(或者我认为它确实如此):
(?!\A)^.*\z)
我想以某种方式结合两个正则表达式,并确保分隔符分隔值匹配不会涉及第一行,但我不确定如何去做。
非常感谢你的帮助,
我
编辑: 我正在使用Java语法进行正则表达式
答案 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)