参见英文答案 >
Match at every second occurrence6个
我想在这个字符串中的 – 和_之间以正则表达式模式提取第二个匹配器:
我想在这个字符串中的 – 和_之间以正则表达式模式提取第二个匹配器:
VA-123456-124_VRG.tif
我试过这个:
Pattern mpattern = Pattern.compile("-.*?_");
但是我在Java中获得了上述正则表达式的123456-124.
我只需要124.
我怎样才能做到这一点?
解决方法
我会在这里使用正式的模式匹配器,尽可能具体.我会用这种模式:
^[^-]+-[^-]+-([^_]+).*
然后检查第一个捕获组以查找可能的匹配项.这是一个有效的代码片段:
String input = "A-123456-124_VRG.tif"; String pattern = "^[^-]+-[^-]+-([^_]+).*"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(input); if (m.find()) { System.out.println("Found value: " + m.group(1) ); } 124
Demo
顺便说一句,有一个班轮也可以在这里工作:
System.out.println(input.split("[_-]")[2]);
但是,这里需要注意的是,它不是非常具体,可能会因您的其他数据而失败.