在点扩展之前的最后一个下划线后查找字符串

时间:2014-08-05 14:35:10

标签: java regex

我需要在此字符串中找到20140809T0000Z

PREVIMER_F2-MARS3D-MENOR1200_20140809T0000Z.nc

我尝试了以下操作以将字符串保留在.nc

之前
(?<=_)(.*)(?=.nc) 

我从最后一个下划线开始有以下内容:

/_[^_]*$/

如何使用regex?

在点扩展前的最后一个下划线后找到字符串?

4 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式

(?<=_)[^_]*(?=\.nc)

在您的模式中,只需将.*替换为[^_]*,以便它与内部字符串匹配。

DEMO

String s = "PREVIMER_F2-MARS3D-MENOR1200_20140809T0000Z.nc";
Pattern regex = Pattern.compile("(?<=_)[^_]*(?=\\.nc)");
Matcher regexMatcher = regex.matcher(s);
if (regexMatcher.find()) {
 String ResultString = regexMatcher.group();
 System.out.println(ResultString);
 } //=> 20140809T0000Z

答案 1 :(得分:2)

您只需要预测这一要求。

您可以使用:

[^._]+(?=[^_]*$)

// matches and returns 20140809T0000Z

RegEx Demo

答案 2 :(得分:1)

RegEx并不总是最好的解决方案...... :)

String pattern="PREVIMER_F2-MARS3D-MENOR1200_20140809T0000Z.nc";
int start=pattern.lastIndexOf("_") + 1;
int end=pattern.lastIndexOf(".");
if(start != 0 && end != -1 && end > start) {
     System.out.println(pattern.substring(start,end);
}

答案 3 :(得分:1)

您可以使用更简单的模式和捕获组

.*_(.*)\.nc

默认情况下,第一个.*将是&#34;贪心&#34;并在_之前消耗尽可能多的字符,只在(.*)内留下所需的字符串。

演示:http://regex101.com/r/aI2xQ9/1

Java代码:

String input = "PREVIMER_F2-MARS3D-MENOR1200_20140809T0000Z.nc";
Pattern pattern = Pattern.compile(".*_(.*)\\.nc");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
   String group = matcher.group(1);
   // ...
}