División de la cadena con RegEx en Android
He estado intentando dividir las Strings
usando RegEx sin éxito. La idea es dividir un metadato de archivo de música dado de su nombre de archivo de una manera que:
"01. Kodaline - Autopilot.mp3"
resultaría en
- ¿Puedo hacer regex reemplazar en Android con grupos del partido?
- Java.util.regex.PatternSyntaxException en Android
- Manejo de spoiler BBcode Android
- Java no funciona con regex \ s, dice: inválido secuencia de escape
- Grupos java regex con android
metadata[0] = "01" metadata[1] = "Kodaline" metadata[2] = "Autopilot"
Este es el RegEx que he estado tratando de usar en su forma original:
^(.*)\.(.*)\-(.*)\.(mp3|flac)
De lo que he leído, necesito dar formato al RegEx para String.split(String regex)
para trabajar. Así que aquí está mi formato RegEx:
^(.*)\\.(.*)\\-(.*)\\.(mp3|flac)
..y esto es lo que mi código parece:
String filename = "01. Kodaline - Autopilot.mp3"; String regex = "^(.*)\\.(.*)\\-(.*)\\.(mp3|flac)"; String[] metadata = filename.split(regex);
Pero no estoy recibiendo el resultado que esperaba. ¿Me puedes ayudar con esto?
- Cómo utilizar la expresión regular en android
- Matcher.replaceAll () y String.replaceAll () no parecen funcionar en Galaxy S 6
- Expresión regular en Android para el campo de contraseña
- Palabra árabe Buscando en el archivo de texto en árabe
- Relacionar URI con <data> como http://example.com/algo en AndroidManifest
- Cómo utilizar SpannableString con Regex en android?
- ¿Qué significa * + en regexp
- Jsoup obtiene elemento en value = ""
Su regex está bien para hacer coincidir la cadena de entrada. Su problema es que utilizó split()
, que espera un regex con un propósito totalmente diferente. Para split()
, la regex que se da coincide con los delimitadores (separadores) que separan partes de la entrada; no coinciden con la entrada entera. Así, en una situación diferente (no en su situación), podría decir
String[] parts = s.split("[\\- ]");
El regex coincide con un carácter que es un guión o un espacio. Así que esto buscará guiones y espacios en su cadena y devolverá las partes separadas por guiones y espacios.
Para utilizar su regex para que coincida con la cadena de entrada, necesita algo como esto:
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 }
que pone los metadata
en las cadenas "01"
, " Kodaline "
, " Autopilot"
, "mp3"
, que está cerca de lo que quieres, excepto tal vez para espacios adicionales (que puedes buscar en tu regex). Desafortunadamente, no creo que haya una función Matcher
incorporada que devuelva todos los grupos en una matriz.
(A propósito, en su regex, usted no necesita los backslashes delante de -
, pero son inofensivos, así que los dejé adentro. El -
no tiene normalmente un significado especial, así que no necesita Sin embargo, en el interior de los corchetes, un guión es especial, por lo que debe usar barras invertidas si desea coincidir con un conjunto de caracteres y un guión es uno de esos caracteres, por eso usé barras invertidas en el ejemplo de split
arriba.
esto funcionó para mí
str.split("\\.\\s+|\\s+-\\s+|\\.(mp3|flac)");
Intente algo como:
String filename = "01. Kodaline - Autopilot.mp3"; String fileWithoutExtension = filename.substring(0, filename.lastIndexOf('.')); System.out.println(Arrays.toString(fileWithoutExtension.replaceAll("[^\\w\\s]", "").split("\\s+"))); Output: [01, Kodaline, Autopilot]
- Problema de Gradle al actualizar desde 0.14.0 a 1.0.0
- Cómo copiar imágenes / archivos al portapapeles en android? Cualquier método o pasos alternativos para obtener este