只是为了获得更多使用正则表达式的经验(同时也让工作生活更轻松),我尝试用 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;
}
一如既往,提前感谢大家
最佳答案
其唯一的第一个 matcher.find()
并捕获组 0
而不是 1
。
if (matcher.find()) {
resultNameBase = matcher.group();
}
关于java - 正则表达式在 Ruby 中匹配,但在 Java 中不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696821/