REGEX:从路径中提取特定字符串

REGEX: To extract particular string from path

我想从路径中提取特定的字符串。

例如,我必须从文件名中提取以 (.) 分隔的第 4 个值。在下面的例子中是“lm”。

示例:

/apps/java/logs/abc.defgh.ijk.lm.nopqrst.uvw.xyz.log
/apps2/java/logs/abc.defgh.ijk.lm.log

这将提取完整的文件名:

.*\/(?<name>.*).log

你可以使用

.*\/(?:[^.\/]*\.){3}(?<value>[^.\/]*)[^\/]*$

或者,如果 .log 必须是扩展名:

.*\/(?:[^.\/]*\.){3}(?<value>[^.\/]*)[^\/]*\.log$

regex demo详情:

  • .* - 除换行字符外的任何零个或多个字符,尽可能多
  • \/ - 一个 / 字符
  • (?:[^.\/]*\.){3} - 除 ./ 之外的零个或多个字符出现次数尽可能多,以及一个点
  • (?<value>[^.\/]*) - 组“值”:除 ./ 之外的零个或多个字符尽可能多
  • [^\/]* - /
  • 以外的零个或多个字符
  • \.log - .log 子串
  • $ - 字符串结尾。

你也可以试试

\/(?:\w+\.){3}(\w+)

或者

\/(?:\w+\.){3}(\w+).*\.log

其中:

  • \/ - 匹配从 "/"
  • 开始的字符串
  • (?:\w+\.){3} - 匹配 3 次出现的 "xyz.",例如abc.defgh.ijk.
  • (\w+) - 捕获字母数字字符串。这将包含目标值,例如"lm"
  • .*\.log - 可选。匹配任何以 .log 结尾的字符集,例如.nopqrst.uvw.xyz.log