méthode Java matches()
attend la regex pour correspondre à la chaîne entière, comme si elle était ancrée à la fois se termine par ^
et $
(ou \A
et \z
). Chaque fois que vous utilisez matches()
avec une expression régulière qui correspond à une partie seulement de la chaîne, vous devez « pad » l'expression rationnelle .*
, comme ceci:
Pattern pattern = Pattern.compile("\"([^\"]+).*");
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
Log.i(TAG, matcher.group(1)); // not group(0)!
} else {
Log.i(TAG, "no match");
}
Le ^
au début de la regex ne faisait pas de mal , Je l'ai juste enlevé pour montrer que ce n'était pas nécessaire. Notez que j'ai également changé votre group(0)
en group(1)
- c'était une autre erreur dans votre code. group(0)
correspond à l'ensemble de la correspondance, tandis que group(1)
correspond uniquement à la partie qui a été trouvée dans le premier jeu de parenthèses de capture.
Vous avez également la possibilité d'utiliser find()
, comme ceci:
Pattern pattern = Pattern.compile("\"([^\"]+)");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
Log.i(TAG, matcher.group(1));
} else {
Log.i(TAG, "no match");
}
Cela correspond à la première instance d'un guillemet suivi d'un ou plusieurs caractères autres que des guillemets (qui sont capturés dans le groupe n ° 1). Cela va correspondre n'importe où; si vous voulez qu'il correspond seulement au début de la chaîne, vous devez utiliser l'ancre ^
comme vous l'aviez dans votre regex d'origine: "^\"([^\"]+)"
(Il y a aussi une méthode lookingAt()
, qui ancre automatiquement le match à la début de la chaîne mais pas la fin, mais personne ne l'utilise jamais.)
Etes-vous bloqué avec regex? –
Le motif me va bien - pouvez-vous vérifier en écrivant les premiers caractères que "line" ne commence pas avec une nouvelle ligne ou quelque chose de fou comme ça? – cdhowie
Utiliser regex pour * analyser * quelque chose est inefficace. Plutôt l'utiliser pour * faire correspondre * quelque chose et utiliser un analyseur complet pour analyser quelque chose. Pour CSV, il existe [parseurs CSV] (http://google.com/search?q = java + csv + parser) (comme les analyseurs HTML existent pour HTML ...). – BalusC