我得到的文件名为字符串,如下所示:
file_g001
file_g222
g_file_z999
我想返回包含“ g_x”的文件,其中x是任何数字(作为字符串)。请注意,最后一个文件不应出现,因为g_后跟一个字母,而不是像前2个一样的数字。
我尝试过:file.contains("_g[0-9]*$")
,但这没用。
预期结果:
file_g001
file_g222
答案 0 :(得分:1)
您是否使用String的方法contains
?
如果是这样,则不适用于正则表达式。
https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#contains-java.lang.CharSequence-
public boolean contains(CharSequence s)
仅当此字符串包含指定的char值序列时才返回true。
考虑使用方法matches
。
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#matches(java.lang.String)
答案 1 :(得分:0)
您的正则表达式也很好,我们将其略微改进为:
^.*_g[0-9]+$
或
^.*_g\d+$
,它可能会起作用。
如果要浏览/简化/修改该表达式,请在this demo的右上角进行解释。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "^.*_g[0-9]+$";
final String string = "file_g001\n"
+ "file_g222\n"
+ "file_some_other_words_g222\n"
+ "file_g\n"
+ "g_file_z999";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}