我的文件格式为* C:\ Temp \ myfile_124.txt *
我需要一个正则表达式,它会给我一个数字“ 124 ”,这是在下划线之后和扩展之前的任何内容。
我尝试了很多方法,最新的是
(.+[0-9]{18,})(_[0-9]+)?\\.txt$
我没有得到所需的输出。有人能告诉我出了什么问题吗?
Matcher matcher = FILE_NAME_PATTERN.matcher(filename);
if (matcher.matches() && matcher.groupCount() == 2) {
try {
String index = matcher.group(2);
if (index != null) {
return Integer.parseInt(index.substring(1));
}
}
catch (NumberFormatException e) {
}
答案 0 :(得分:2)
第一部分[0-9]{18,}
表示您至少有18位数字。
通常使用正则表达式,使表达式尽可能简单是一个好主意。我建议尝试
_([0-9]+)?\\.txt$
注意:您必须调用find()才能执行查找,否则会显示“找不到匹配项”
这个例子
String s = "C:\\Temp\\myfile_124.txt";
Pattern p = Pattern.compile("_(\\d+)\\.txt$");
Matcher matcher = p.matcher(s);
if (matcher.find())
for (int i = 0; i <= matcher.groupCount(); i++)
System.out.println(i + ": " + matcher.group(i));
打印
0: _124.txt
1: 124
答案 1 :(得分:0)
这可能适合您:(?:.*_)(\d+)\.txt
结果在匹配组中。
这个使用正向前瞻,只会匹配数字:\d+(?=\.txt)
答案 2 :(得分:0)
答案 3 :(得分:0)
你可以这样做
^.*_\([^\.]*\)\..*$
答案 4 :(得分:0)
.*_([0-9]+)\.txt
这也应该有用。当然你应该为Java双重逃避。