Java正则表达式字母表后跟数字
我得到的文件名为字符串,如下所示:Java正则表达式字母表后跟数字,java,regex,Java,Regex,我得到的文件名为字符串,如下所示: file_g001 file_g222 g_file_z999 我想返回包含“g_x”的文件,其中x是任意数字(作为字符串)。请注意,最后一个文件不应出现,因为g_后面跟一个字母表,而不是像前2个那样的数字 我尝试了:file.contains(“\g[0-9]*$”),但没有成功 预期成果: file_g001 file_g222 您是否使用字符串的方法contains? 如果是这样,则它不适用于正则表达式 当且仅当此字符串包含指定的字符值
file_g001
file_g222
g_file_z999
我想返回包含“g_x”的文件,其中x是任意数字(作为字符串)。请注意,最后一个文件不应出现,因为g_后面跟一个字母表,而不是像前2个那样的数字
我尝试了:file.contains(“\g[0-9]*$”)
,但没有成功
预期成果:
file_g001
file_g222
您是否使用字符串的方法
contains
?
如果是这样,则它不适用于正则表达式
当且仅当此字符串包含指定的字符值序列时,返回true
考虑使用方法匹配
您的正则表达式也很好,我们只是稍微改进一下:
^.*_g[0-9]+$
或
这可能会奏效
如果要探索/简化/修改该表达式,请在的右上面板中进行说明
试验
import java.util.regex.Matcher;
导入java.util.regex.Pattern;
最后一个字符串regex=“^.*_g[0-9]+$”;
final String=“文件\u g001\n”
+“文件\u g222\n”
+“文件\u一些\u其他\u单词\u g222\n”
+“文件\u g\n”
+“g_文件_z999”;
最终模式=Pattern.compile(regex,Pattern.MULTILINE);
final Matcher Matcher=pattern.Matcher(字符串);
while(matcher.find()){
System.out.println(“完全匹配:+matcher.group(0));
对于(int i=1;i)有一个.png扩展名,似乎您不是在寻找g_x,而是在寻找_gx,这意味着第三个文件不会被返回anyway@TwoStarII使用file.matches(“.*\\.png$”
或file.matches(.*\\.png$”)
…太棒了-很有效!@brso05将其作为答案发布,我将accept@TwoStarII继续接受阿诺·克劳德尔的回答,它本质上是在说同样的话。。。
^.*_g[0-9]+$
^.*_g\d+$
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));
}
}