Pregunta

Me gustaría hacer coincidir la hora (10.00) de una cadena con la fecha y la hora (" 21.01.08 10.00 "). Estoy usando la siguiente expresión regular:

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}\\b" "g");

Pero esto coincide con 21.01 de 21.01.08 y 10.00.

Estoy usando PCRE como mi motor de expresión regualar.

Actualización:

Lo siento, debería haber sido más claro. Los datos y el tiempo son parte de una cadena más grande. Quiero extraer el tiempo de esa cadena.

Por ejemplo:

" El 21.01.08 a partir de las 10.00 se celebrará una fiesta en la biblioteca " "21.08.08 - A las 10:00 habrá una fiesta" " El 21.08.08 está programado para un .... El ... comenzará a las 10.00 "

¿Es esto posible?

¿Fue útil?

Solución

Su expresión regular original no funcionó porque \ b (límite de palabra) coincide en el ". " en 21.01.08. Debe codificar los límites de manera más sólida:

(?:[^\d:.]|^)(\d\d?[.:]\d\d)(?![.:\d])

Esto captura la hora, en cualquiera de las anotaciones que usó, sin incluir las fechas. Tenga en cuenta que no valida el tiempo. Por ejemplo, coincidiría con "88: 99" Es posible validar el tiempo, pero complica el patrón significativamente y es probable que sea excesivo en la mayoría de las situaciones.

Sería bueno usar un retrospectivo en lugar de la agrupación que no captura, pero PCRE no admite retrospectiva de ancho variable.

Otros consejos

^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$

debería hacer el truco con la parte de tiempo que se coloca en un grupo de captura.

el " nuevo RegExp " No estoy seguro acerca de (¿Java quizás?). En Perl puede obtener el valor como ...

if ("21.01.08 10.00" =~ m/^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$/g) {
  $time_part = $1;
}

en .NET lo siguiente debería funcionar ...

  Regex r = new Regex(@"^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})<*>quot;);
  string dateTimeString = "21.01.08 10.00";
  if (r.IsMatch(dateTimeString)) {
    string timePart = r.Match(dateTimeString).Groups[1].Value;
    Console.Write(timePart);
  }
  Console.ReadKey();

También puede utilizar una Captura con nombre si desea utilizar algo menos ambiguo luego el índice en el grupo de captura.

intente usar

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}<*>quot; "g");

$ indica el final de la cadena

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top