正则表达式在最后一个下划线之后查找给定数量的字符

Regex to find a given number of characters after last underscore

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

示例字符串:

sample_filename_AB12123321.pdf

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

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

而且没有办法访问代码,只能修改regex pattern

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

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

参见regex demo

详情

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

Java demo:

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.