2

我需要在给定文件名的最后一个下划线之后找到两个字符。

示例字符串:

sample_filename_AB12123321.pdf

我正在使用[^_]*(?=\.pdf),但它会找到下划线之后的所有字符,例如AB12123321.

我只需要找到前两个字符AB

而且,没有办法访问代码,我只能修改正则表达式模式。

4

1 回答 1

3

如果您想使用正则表达式解决问题,您可以使用:

 (?<=_)[^_]{2}(?=[^_]*$)

请参阅正则表达式演示

细节

  • (?<=_) - 下划线必须立即出现在当前位置的左侧
  • [^_]{2}- 捕获组 1:除下划线以外的任意 2 个字符
  • (?=[^_]*$)- 在当前位置的左侧,必须出现除下划线之外的任何 0+ 字符,然后是字符串的结尾。

请参阅Java 演示

String s = "sample_filename_AB12123321.pdf";
Pattern pattern = Pattern.compile("(?<=_)[^_]{2}(?=[^_]*$)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
    System.out.println(matcher.group(0)); 
} 

输出:AB

于 2019-08-16T09:51:00.717 回答