如何解决用于从绝对路径中提取文件夹名称的正则表达式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 #1 和 regex demo #2。
重点是
- 确保正则表达式匹配整个输入字符串
- 确保创建正则表达式转义的每个反斜杠(如
\d
、\\
)也被转义 - 在要提取的匹配部分周围加上括号
- 在替换中使用
$1
提取该部分。
这是第一个模式描述:
-
.*
- 除换行符以外的零个或多个字符,尽可能多 -
[/\\]
-/
或\
字符 -
(\d{8})
- 捕获组(参考替换模式中的$1
):八位数字 -
[\\\\/]?
- 可选的/
或\
字符 -
$
- 字符串结束。
如果您只对获取价值感兴趣,而对方法不感兴趣,请尝试以下方法,
state = ${absolute.path:getDelimitedField(4,'/')}
date = ${absolute.path:getDelimitedField(5,'/')}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。