¿Alguien sabe cómo es posible extraer el texto que se encuentre luego de varios espacios en blanco en una línea de log?
Busco extraer el elemento que se encuentra posterior a la hora, en la cuarta posición. Este elemento, hay veces que lo recibo en formato IP (123.123.123.123
) y otras veces en formato de texto (abc
) ya que llega el nombre del hostname.
Ejemplos de la entrada y la salida esperada:
Input: <2>Mar 13 21:34:09 12.11.18.67 1,2017/08/08 21:34:09,62701006152,lunes,
Output: 12.11.18.67
Input: <2>Mar 13 21:34:09 local.prueba 1,2017/08/08 21:34:09,62701006152,lunes,
Output: local.prueba
Mi intento fue capturar la IP usando regex:
d{1,3}.d{1,3}.d{1,3}.d{1,3}
Pero eso no me vale para los casos que la IP llegue con el nombre del host.
Buenos días, lo que debes hacer es cortar el String, con la función split()
que le puedes aplicar al String.
La función split(), así sin ningún argumento, cortará cada vez que encuentre un espacio.
Yo hice una corrida con tus textos en la página repl.it, y como se puede ver la en imagen, lo que se nos devuelve es un arreglo con strings, en donde en los dos casos, el cuarto elemento es el dominio o la ip, según corresponda.

Te dejo documentación (En Inglés) en donde va incluido este método.
Por tanto, la siguiente línea de código bastaría para poder obtener la información que deseas.
'<2>Mar 13 21:34:09 12.11.18.67 1,2017/08/08 21:34:09,62701006152,lunes,'.split()[3]
'<2>Mar 13 21:34:09 local.prueba 1,2017/08/08 21:34:09,62701006152,lunes,'.split()[3]

Nota: Esta respuesta es para la pregunta original “¿Cómo con regex extraer el texto luego de ciertos espacios en blanco de un parámetro de una línea de un log?” que ha sido manipulada para adaptarse a una respuesta diferente.
En Python:
import re
p = re.compile('^Input:s+[^s]+s[^s]+s[^s]+s([^s]+).*$')
m=p.match("Input: <2>Mar 13 21:34:09 12.11.18.67 1,2017/08/08 21:34:09,62701006152,lunes,")
print m.group(1)
m=p.match("Input: <2>Mar 13 21:34:09 local.prueba 1,2017/08/08 21:34:09,62701006152,lunes")
print m.group(1)
Esto lo puedes probar en Notepad++ y despues traducirlo a regex de Java o al lenguaje que estés usando. ^Input:s+[^s]+s[^s]+s[^s]+s([^s]+).*$
La expresión en paréntesis se puede extraer o usar como sustituto en la linea original.
