我正在寻找从路径中提取特定字符串。
例如,我必须从文件名中提取由 (.) 分隔的第四个值。在以下示例中为“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
- 选修的。匹配任何以.log
eg结尾的字符集.nopqrst.uvw.xyz.log