Regex para extraer hashtags con dos partes separados por puntos

Carath:

Estoy intentando crear una expresión regular con el fin de extraer un poco de texto a partir de cadenas. Quiero extraer el texto de las direcciones URL o mensajes de texto normales, por ejemplo:

endpoint/?userId=#someuser.id

O

Hi #someuser.name, how are you?

Y de tanto quiero extraer exactamente #someuser.namedel mensaje y #someuser.idde la URL. Puede haber haber muchos de los que la cadena de extraer de la URL y mensajes.

Mi expresión regular actualmente se ve así:

(#[^\.]+?\.)([^\W]\w+\b)

Funciona bien, excepto uno para un caso y no sé cómo hacerlo - por ejemplo:

Esas cadenas NO DEBE ser encontrados: # .id, #.id. Debe haber al menos un carácter entre #y .. Uno o más espacios entre los caracteres no deben ser igualada.

¿Cómo puedo hacer que el uso de expresiones regulares mi actual?

Wiktor Stribiżav:

Puedes utilizar

String regex = "#[^.#]*[^.#\\s][^#.]*\\.\\w+";

Vea la demostración de expresiones regulares y su gráfica :

introducir descripción de la imagen aquí

detalles

  • #- un #símbolo
  • [^.#]*- cero o más caracteres distintos .y#
  • [^.#\\s]- cualquier carbón, pero ., #y un espacio en blanco
  • [^#.]*- - cero o más caracteres distintos .y#
  • \. - un punto
  • \w+- 1+ caracteres de texto (letras, dígitos o _).

demostración de Java :

String s = "# #.id\nendpoint/?userId=#someuser.id\nHi #someuser.name, how are you?";
String regex = "#[^.#]*[^.#\\s][^#.]*\\.\\w+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(0)); 
} 

Salida:

#someuser.id
#someuser.name

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=232903&siteId=1
Recomendado
Clasificación