微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于从绝对路径中提取文件夹名称的正则表达式Linux

如何解决用于从绝对路径中提取文件夹名称的正则表达式Linux

我在 Apache Nifi 中使用正则表达式函数查找文件路径中的文件名称,但它似乎没有给我正确的结果

我想从这个文件路径中用两个不同的正则表达式解析出“状态”和“日期”

/upload/main/state/02022021/

这是我使用的正则表达式

${ "absolute.path":replaceFirst( ".*[/\\\\]{1}([a-zA-Z]+)[/\\\\]{1}(\d{8}).?$","$1") } ${"absolute.path":replaceFirst(".*(\d{8}).+$","$1")}

解决方法

如果出现总是在同一个地方,我会使用这两个表达式:

  • 用于最后位置的日期 (?<=\/)[^\/]*?(?=\/$)
  • 表示倒数第二个位置 (?<=\/)[^\/]*?(?=\/[^\/]*?\/$)

此外,您可以更改 .* 以获得更具体的内容以提高可靠性。

,

可以考虑使用

state = ${"absolute.path":replaceFirst(".*[/\\\\]([^\\\\/]+)[/\\\\]\\d{8}[/\\\\]?$","$1")}
date  = ${"absolute.path":replaceFirst(".*[/\\\\](\\d{8})[\\\\/]?$","$1")}

参见 regex demo #1regex demo #2

重点是

  1. 确保正则表达式匹配整个输入字符串
  2. 确保创建正则表达式转义的每个反斜杠(如 \d\\)也被转义
  3. 在要提取的匹配部分周围加上括号
  4. 在替换中使用 $1 提取该部分。

这是第一个模式描述:

  • .* - 除换行符以外的零个或多个字符,尽可能多
  • [/\\] - /\ 字符
  • (\d{8}) - 捕获组(参考替换模式中的 $1):八位数字
  • [\\\\/]? - 可选的 /\ 字符
  • $ - 字符串结束。
,

如果您只对获取价值感兴趣,而对方法不感兴趣,请尝试以下方法,

state = ${absolute.path:getDelimitedField(4,'/')}
date  = ${absolute.path:getDelimitedField(5,'/')}

参考 -Nifi Expression Language

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。