为了获得更多正则表达式的经验(同时也让工作中的生活变得更轻松),我试图用Java解析一些文件名。
我的字符串是:/home/user/example/Results/ExampleFilePrefix_20140324-0500_OptionalTextThatMightContainNumbers123.csv
基本上文件名将始终以ExampleFilePrefix_
开头,后跟时间戳,有时以OptionalTextThatMightContainNumbers123
结尾,具体取决于文件的生成方式。我想要的相关信息是时间戳,后跟可选文本(如果存在)。
我正在搞乱各种正则表达式,虽然我可以让它们全部使用Ruby正则表达式解析器,但我无法让它们在Java中工作。我去的时候并没有跟踪它们,但这是我最近的尝试:
_(\w+-\w+)
在Ruby中可以正常工作:http://rubular.com/r/K2BiboURRo,但在Java中甚至没有接近匹配:http://fiddle.re/c7m04
由于在线解析器无法匹配,我不会认为我编写的代码存在问题,但我会将其粘贴到此处以确保
private String extractFileName(String filename) {
String resultNameBase = "RegexDidntMatch";
Pattern pattern = Pattern.compile("_(\\w+-\\w+)", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(filename);
if (matcher.matches() && matcher.find()) {
resultNameBase = matcher.group(1);
}
return resultNameBase;
}
一如既往地感谢所有人提前
答案 0 :(得分:2)
这部分是问题:
if (matcher.matches() && matcher.find())
Matcher#matches()
将完整的输入字符串与正则表达式匹配。
将其替换为:
if (matcher.find())
答案 1 :(得分:2)
仅有matcher.find()
中的第一个{+ 1}而是0
而不是1
。
if (matcher.find()) {
resultNameBase = matcher.group();
}