Je me demande si quelqu'un pourrait me aider à comprendre comment analyser une chaîne ayant le format suivant:Parsing une chaîne contenant des caractères échappées en Java
;field1-field2-fieldN;field1-field2-fieldN;
Chaque enregistrement est délimité par « ; » et chaque champ d'un enregistrement est délimité par '-'. La complication est que les champs individuels peuvent contenir des caractères délimiteurs échappés comme "\;" ou "-". Cela provoque mon code d'analyse simple ci-dessous pour échouer. Donc ce que j'essaie de faire est de trouver des expressions regex qui correspondent aux délimiteurs mais ne correspondent pas aux délimiteurs échappés. Mes connaissances en regex ne sont pas très bonnes mais je m'attendais à trouver une façon de combiner "([^ \;])" et "([;])" pour obtenir ce dont j'ai besoin.
public static List<ParsedRecord> parse(String data) {
List<ParsedRecord> parsedRecords = new List<ParsedRecord>();
String[] records = data.split(";");
for (String record : records) {
String[] fields = data.split("-");
parsedRecords.add(new parsedRecord(fields));
}
return parsedRecords;
}
Merci beaucoup d'avance.
Merci! J'ai utilisé une combinaison de votre réponse et celle de Jon pour faire fonctionner l'analyseur. Très appréciée! –
Ce n'est pas tout à fait correct ... l'expression régulière définie ci-dessus aura aussi le caractère précédant le délimiteur à supprimer. Alors "bonjour, monde" devient [enfer, monde]. Le meilleur moyen est d'utiliser le regard négatif derrière le mécanisme dans regex: http://stackoverflow.com/questions/820172/how-to-split-a-comma-separated-string-while-ignoring-escaped-commas – Alvin