我正在寻找从路径中提取特定字符串。
例如,我必须从文件名中提取由 (.) 分隔的第四个值。在以下示例中为“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$
请参阅正则表达式演示。详情:
.*- 除换行符以外的任何零个或多个字符,尽可能多\/- 一个/字符(?:[^.\/]*\.){3}- 除了尽可能多的字符和一个点之外.,出现三个零个或多个字符/(?<value>[^.\/]*)- 组“值”:零个或多个字符而不是.尽可能/多的字符[^\/]*- 零个或多个字符/\.log- 一个.log子串$- 字符串结束。你也可以试试
\/(?:\w+\.){3}(\w+)
或者
\/(?:\w+\.){3}(\w+).*\.log
在哪里:
\/- 匹配字符串从"/"(?:\w+\.){3}- 匹配 3 次出现的"xyz."egabc.defgh.ijk.(\w+)- 捕获字母数字字符串。这将包含目标值,例如"lm".*\.log- 选修的。匹配任何以.logeg结尾的字符集.nopqrst.uvw.xyz.log