我需要在此字符串中找到20140809T0000Z
:
PREVIMER_F2-MARS3D-MENOR1200_20140809T0000Z.nc
我尝试了以下操作以将字符串保留在.nc
:
(?<=_)(.*)(?=.nc)
我从最后一个下划线开始有以下内容:
/_[^_]*$/
如何使用regex?
在点扩展前的最后一个下划线后找到字符串?答案 0 :(得分:2)
您可以使用以下正则表达式
(?<=_)[^_]*(?=\.nc)
在您的模式中,只需将.*
替换为[^_]*
,以便它与内部字符串匹配。
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)
答案 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);
// ...
}