Me pregunto si alguien me podría ayudar a encontrar la manera de analizar una cadena que tiene el siguiente formato:analizar una cadena que contiene caracteres de escape utilizando Java
;field1-field2-fieldN;field1-field2-fieldN;
Cada registro está delimitado por ';' y cada campo dentro de un registro está delimitado por '-'. La complicación es que los campos individuales pueden contener caracteres delimitadores escapados como "\;" o "-". Esto hace que mi código de análisis simple a continuación falle. Entonces, lo que trato de hacer es encontrar expresiones regulares que coincidan con los delimitadores pero que no coincidan con los delimitadores que se han escapado. Mi conocimiento de expresiones regulares no es tan bueno, pero esperaba que haya una forma de combinar "([^ \;])" y "([;])" para obtener lo que necesito.
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;
}
Muchas gracias de antemano.
Gracias! Usé una combinación de tu respuesta y la de Jon para que el analizador funcione. ¡Muy apreciado! –
Esto no es del todo correcto ... la expresión regular definida anteriormente tendrá el carácter que precede al delimitador para ser eliminado también. Entonces "hola, mundo" se convierte en [infierno, mundo]. La mejor manera es usar el mecanismo de mirada negativa detrás de Regex: http://stackoverflow.com/questions/820172/how-to-split-a-comma-separated-string-while-ignoring-escaped-commas – Alvin