我一直在尝试分开Strings
使用正则表达式没有成功。这个想法是将给定的音乐文件元数据与其文件名分开,以便:
"01. Kodaline - Autopilot.mp3"
..会导致..
metadata[0] = "01"
metadata[1] = "Kodaline"
metadata[2] = "Autopilot"
这是我一直尝试以其原始形式使用的正则表达式:
^(.*)\.(.*)\-(.*)\.(mp3|flac)
根据我的阅读,我需要格式化正则表达式String.split(String regex)
上班。这是我格式化的正则表达式:
^(.*)\\.(.*)\\-(.*)\\.(mp3|flac)
..这就是我的代码的样子:
String filename = "01. Kodaline - Autopilot.mp3";
String regex = "^(.*)\\.(.*)\\-(.*)\\.(mp3|flac)";
String[] metadata = filename.split(regex);
但我没有收到我预期的结果。你能帮我解决这个问题吗?
您的正则表达式可以很好地匹配输入字符串。你的问题是你使用了split()
,它需要一个具有完全不同目的的正则表达式。为了split()
,你给它的正则表达式匹配分隔符(分隔符)分隔输入的各个部分;它们与整个输入不匹配。因此,在不同的情况下(不是你的情况),你可以说
String[] parts = s.split("[\\- ]");
正则表达式匹配一个破折号或空格字符。因此,这将在字符串中查找破折号和空格,并返回由破折号和空格分隔的部分。
要使用正则表达式来匹配输入字符串,您需要如下所示:
String filename = "01. Kodaline - Autopilot.mp3";
String regex = "^(.*)\\.(.*)\\-(.*)\\.(mp3|flac)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(filename);
String[] metadata = new String[4];
if (matcher.find()) {
metadata[0] = matcher.group(1); // in real life I'd use a loop
metadata[1] = matcher.group(2);
metadata[2] = matcher.group(3);
metadata[3] = matcher.group(4);
// the rest of your code
}
其中设置metadata
到琴弦"01"
, " Kodaline "
, " Autopilot"
, "mp3"
,这接近您想要的,除了额外的空格(您可以在正则表达式中查找)。不幸的是,我不认为有内置的Matcher
返回一个数组中所有组的函数。
(顺便说一下,在你的正则表达式中,你不需要前面的反斜杠-
,但它们是无害的,所以我把它们留在了里面。-
通常没有特殊含义,因此不需要转义。但是,在方括号内有一个连字符is特殊,因此如果您想匹配一组字符并且连字符是其中一个字符,则应该使用反斜杠。这就是为什么我在我的split
上面的例子。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)