我有一个显示歌曲名称和艺术家的ListView。有时,歌曲名称包含曲目编号和分隔符,其中包含一些格式为
的分隔符13 - J. Cole - Best Friend
和其他人一样
13 - Beautiful People
经过一番挖掘后,我发现最好的解决方法是定义一个正则表达式模式,删除字符串中不必要的字符。凉。我已经查看过关于类似主题here的其他SO问题以及一些博客文章,但仍然没有运气。
这是我第一次处理正则表达式时,我发现它非常有用,只是试图提出有效/有用的模式。
如果是匹配的话,我需要从字符串中删除
The track number
The "-" or whatever separator character that follows it
The artist name and the "-" that follows that(Each artist name is listed below the song, so it would be redundant)
对于这方面的任何帮助都会像往常一样非常感谢,谢谢!
编辑:我想要的相同输出是这样的,只有歌曲名称。没有曲目编号,如果适用; “ - ”之后没有艺术家姓名
Beautiful People
Angel of Mine
Human Nature
答案 0 :(得分:5)
这是一个可以使用的正则表达式:
name.replaceFirst("^\\d+\\.?\\s*-(?:.*?-)?\\s*", "")
这取出:
答案 1 :(得分:2)
一段代码会更好地给你一个提示:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String[] songNames = {
"1 - my awesome artist - go beyond",
"2 - such is life",
"My awesome song"
};
Pattern trackNumberPattern = Pattern.compile("^ *\\d+ *- *");
Pattern artistPattern = Pattern.compile(" *- *[^-]+ *- *");
Matcher matcher;
for(String song: songNames) {
matcher = trackNumberPattern.matcher(song);
if(matcher.find()) {
song = matcher.replaceFirst("");
}
matcher = artistPattern.matcher(song);
if(matcher.find()) {
song = matcher.replaceFirst("");
}
System.out.println(">>> " + song);
}
}
}
您可以在此处找到要在java中编写正则表达式的文档:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
免责声明:如果某些歌曲名称或艺术家名称包含短划线( - )等,则无法正常工作......
答案 2 :(得分:1)
你可以使用这个正则表达式(有点激进):
^\\d*+\\W*+\\b(?>[^-]++-\\s++(?=\w))?
并替换它。
这会破坏开头的所有数字,后跟非单词字符,如果存在则解释名称