Java正则表达式字母后跟数字

时间:2019-07-16 12:29:18

标签: java regex

我得到的文件名为字符串,如下所示:

file_g001  
file_g222  
g_file_z999

我想返回包含“ g_x”的文件,其中x是任何数字(作为字符串)。请注意,最后一个文件不应出现,因为g_后跟一个字母,而不是像前2个一样的数字。

我尝试过:file.contains("_g[0-9]*$"),但这没用。

预期结果:

file_g001  
file_g222

2 个答案:

答案 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));
    }
}
相关问题