Regex para eliminar el número de pista del nombre de la canción?

Tengo un ListView que muestra nombres de canciones y artistas. A veces, los nombres de las canciones contienen el número de pista y un separador con algunos en este formato

13 - J. Cole - Best Friend 

Y otros como este

 13 - Beautiful People 

Después de algunos cavar alrededor me encontré con que la mejor manera de ir sobre esto es definir un patrón regex que eliminará cualquier carácter innecesario en la cadena. Guay. He mirado otras preguntas SO en un tema similar aquí y un par de entradas de blog, pero aún no hay suerte.

Esta es mi primera vez que se ocupan de las expresiones regulares y me parece muy útil, sólo tratando de envolver mi cabeza alrededor de venir con patrones eficientes / útiles.

Esto es lo que necesito quitar de la cadena si es un partido

 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) 

Cualquier ayuda en esto sería muy apreciada como de costumbre chicos, gracias!

Edit: La misma salida que me gustaría es algo como esto, con sólo los nombres de las canciones. No hay números de pista, y si es aplicable; Ningún nombre de artista siguiendo el "-"

 Beautiful People Angel of Mine Human Nature 

Esta es una posible expresión regular que podría usar:

 name.replaceFirst("^\\d+\\.?\\s*-(?:.*?-)?\\s*", "") 

Esto saca lo siguiente:

  1. Dígitos en la parte delantera
  2. Opcionalmente seguido por un punto
  3. Opcionalmente espacios
  4. Un guión
  5. Si se encuentra un guión más, entonces todo hasta ese
  6. Opcionalmente espacios

Un pedazo de código será mejor para darle una pista:

 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); } } } 

Puede encontrar el documento para escribir regex en java aquí: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

AVISO: Esto no funcionará correctamente si algunos de los nombres de canciones o nombres de artista contienen guiones (-), etc …

Puedes usar este regex (un poco radical):

 ^\\d*+\\W*+\\b(?>[^-]++-\\s++(?=\w))? 

Y reemplazarlo por nada.

Esto destruirá todos los dígitos seguidos por los caracteres no-palabra en el principio, y el nombre de intérprete si está presente

  • Cómo utilizar SpannableString con Regex en android?
  • Expresión regular de Android para obtener enlaces de la fuente de la página web
  • Android Eclipse Utilice herramientas externas para ejecutar una secuencia de comandos en el código
  • Caracteres especiales de Android Sqlite
  • ¿Cómo usar Android REGEX con clases de patrón y Matcher?
  • Número de tarjeta de validación de la validación de la expresión regular
  • Matcher.replaceAll () y String.replaceAll () no parecen funcionar en Galaxy S 6
  • Detectar subrogados altos en una cadena utilizando expresiones regulares
  • Buscar una subcadena entre ciertos caracteres en un índice desconocido
  • Android Java - String .replaceAll para reemplazar caracteres específicos (regex)
  • Regex <img> Análisis de etiquetas con src, width, height
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.