我要提取此字符串中-
和_
之间的正则表达式模式中的第二个匹配器:
VA-123456-124_VRG.tif
我尝试过:
Pattern mpattern = Pattern.compile("-.*?_");
但是对于Java中的上述正则表达式,我得到了123456-124
。
我只需要124
。
我该如何实现?
答案 0 :(得分:4)
如果您知道这是您的格式,则会返回要求的数字。
下划线之前不是破折号的所有内容
Pattern pattern = Pattern.compile("([^\-]+)_");
答案 1 :(得分:3)
我将在这里使用正式的模式匹配器,以使其尽可能具体。我会使用这种模式:
^[^-]+-[^-]+-([^_]+).*
,然后检查第一个捕获组是否可能匹配。这是一个工作代码段:
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
顺便说一句,有一个衬板也可以在这里工作:
System.out.println(input.split("[_-]")[2]);
但是,这里需要说明的是,它不是很具体,可能无法用于其他数据。
答案 2 :(得分:2)
您知道您只需要数字,因此更具体Pattern.compile("-([0-9]+)_");
答案 3 :(得分:1)
尝试使用以下正则表达式:
.*-(.*?)_
这将是:。* 将匹配所有字符,直到找到-为止。另外,由于它很贪婪,它会尝试找到最后一个可能的选项,即24点之前。
演示:Method for scrolling to a time #467
JShell输出:
jshell> Pattern pattern = Pattern.compile(".*-(.*?)_");
pattern ==> .*-(.*?)_
jshell> Matcher matcher = pattern.matcher("VA-123456-124_VRG.tif");
matcher ==> java.util.regex.Matcher[pattern=.*-(.*?)_ region=0,21 lastmatch=]
jshell> if(matcher.find()){
...> System.out.println(matcher.group(1));
...> }
124
答案 4 :(得分:1)
您的测试用例很低,但是如果我回答您的测试用例,我认为下面的正则表达式会有所帮助。
-.*-(.*)_
然后提取第一组。
答案 5 :(得分:1)
如果您只是想以简单的方式提取内容,请继续
public static void main(String[] args) {
String s = "VA-123456-124_VRG.tif";
System.out.println(s.split("[_-]")[2]);
}