正则表达式在最后一个下划线之后查找给定数量的字符
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+ 个字符,然后是字符串结尾。
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
.
我需要找到给定文件名中最后一个下划线后的两个字符。
示例字符串:
sample_filename_AB12123321.pdf
我正在使用 [^_]*(?=\.pdf)
,但它会找到下划线之后的所有字符,例如 AB12123321
。
我只需要找到前两个字符 AB
。
而且没有办法访问代码,只能修改regex pattern
如果您想使用正则表达式解决问题,您可以使用:
(?<=_)[^_]{2}(?=[^_]*$)
参见regex demo。
详情
(?<=_)
- 下划线必须立即出现在当前位置的左侧[^_]{2}
- 捕获第 1 组:下划线 以外的任何 2 个字符
(?=[^_]*$)
- 在当前位置的左边,必须出现除下划线以外的任何 0+ 个字符,然后是字符串结尾。
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
.