Expresión regular en java para reemplazar un patrón en varias líneas
Frecuentes
Visto 315 veces
-2
Quiero reemplazar esta entrada de archivo a una tabla html:
ip add St Stat Type Mode ip only class numbers
------------------------------ -- ----- ---- ---- --------------- ------ -----
ABC_127.562.200.5/32 - up ABC - 127.562.200.5 5
ABC_127.292.200.3/32 - up ABC - 127.562.200.5 4
ABC_127.262.200.13/32 - up ABC - 127.562.200.5 3
ABC:jdnsajkds
Sé que esto terminará con "ABC", pero no puedo entender por qué "/" también aparece en la entrada.
import java.util.regex.*;
interface LogExample {
public static final int NUM_FIELDS = 7;
public static final String logEntryLine = "ABC_127.562.200.5/32 **space** -- **space** up **space** ABC **space** -- **space** 127.562.200.5 **space** 5 **space** ";
}
public class LogRegExp implements LogExample {
public static void main(String argv[]) {
String logEntryPattern = "";//thats i am not getting
System.out.println("Using RE Pattern:");
System.out.println(logEntryPattern);
System.out.println("Input line is:");
System.out.println(logEntryLine);
Pattern p = Pattern.compile(logEntryPattern);
Matcher matcher = p.matcher(logEntryLine);
if (!matcher.matches() ||
NUM_FIELDS != matcher.groupCount()) {
System.err.println("Bad log entry (or problem with RE?):");
System.err.println(logEntryLine);
return;
}
System.out.println("name + IP Address: " + matcher.group(1));
System.out.println("status1: " + matcher.group(2));
System.out.println("status2: " + matcher.group(3));
System.out.println("type: " + matcher.group(4));
System.out.println("mode: " + matcher.group(5));
System.out.println("IP Address: " + matcher.group(6));
System.out.println("class: " + matcher.group(7));
System.out.println("numbers: " + matcher.group(8));
}
}
2 Respuestas
0
Dado que la columna de su clase está en blanco, no podemos hacer mucho para extraer esa información. Pero esta expresión regular coincidirá con las 7 columnas de datos que tiene:
String logEntryPattern = "(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)";
Necesitamos escapar de la barra invertida en el literal de cadena de Java.
System.out.println("name + IP Address: " + matcher.group(1));
System.out.println("status1: " + matcher.group(2));
System.out.println("status2: " + matcher.group(3));
System.out.println("type: " + matcher.group(4));
System.out.println("mode: " + matcher.group(5));
System.out.println("IP Address: " + matcher.group(6));
System.out.println("numbers: " + matcher.group(7));
Francamente, una expresión regular es un poco demasiado para lo que está tratando de hacer, así que solo tokenizar espacios funcionaría igual de bien, pero hace el trabajo.
contestado el 22 de mayo de 12 a las 23:05
0
Tengo la solución:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches
{
public static void main( String args[] )
{
// String to be scanned to find the pattern.
// String line = "MSEM-E-031_TO_RVBC-R-001_T1 en up TE ingr 124.252.200.2 ELSP 0";
// String pattern = "((\\-{8})+.*?)";
String line = "ADR-SSF-1008-M008 vlan en dn 10081008";
String pattern = "((\\-{6})+.*?)";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find( ))
{
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
}
else
{
System.out.println("NO MATCH");
}
}
}
contestado el 28 de mayo de 12 a las 07:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java regex pattern-matching or haz tu propia pregunta.
+1 @EugeneKuleshov por mejorar sus posibilidades de obtener una respuesta :) - Marko Topolnik
¿Qué has probado ya? Parece que tiene algún código que divide la entrada en espacios en blanco, pero el carácter de barra inclinada en la primera columna lo está tropezando. - David Gorsline
no, en realidad no tengo idea de qué hacer con esto. pero esto es la salida de un archivo. que terminará con "ABC: "+alguna cadena. - devilsam
¿Alguien puede proporcionar una expresión regular que analizará estas 6 columnas diferentes de acuerdo con sus valores? devilsam
@devilsam: las expresiones regulares coinciden con cadenas, no las "analizan", su programa debería hacer eso. Qué exactamente estás tratando de hacer? Muéstrenos su código actual y díganos qué hace y qué necesita exactamente. lo quiero hacer... - thkala