Question

Je voudrais faire correspondre l'heure (10,00) d'une chaîne avec la date et l'heure ("21.01.08 10,00"). J'utilise l'expression régulière suivante:

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

Mais cela correspond à 21.01 du 21.01.08 à 10.00.

J'utilise PCRE comme moteur d'expression standard.

Mise à jour:

Je suis désolé, j'aurais dû être plus clair. Les données et l'heure font partie d'une chaîne plus grande. Je veux extraire l'heure de cette chaîne.

Par exemple:

"Le 21.01.08 à partir de 10h00, une fête aura lieu à la bibliothèque" "21.08.08 - À 10 heures, il y aura une fête" "Le 21.08.08, vous êtes programmé pour un .... Le ... commencera à 10h00 "

Est-ce possible?

Était-ce utile?

La solution

Votre expression rationnelle d'origine ne fonctionnait pas car \ b (limite de mot) correspondait à ""." dans " 21.01.08. " Vous devez coder les limites de manière plus robuste:

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

Ceci capture l'heure, dans l'une des notations que vous avez utilisées, tout en excluant les dates. Notez que cela ne valide pas l'heure. Par exemple, il correspondrait à "88: 99". Valider l’heure est possible, mais complique considérablement le schéma et risque d’être excessif dans la plupart des situations.

Il serait bien d’utiliser une apparence postérieure au lieu du groupe sans capture, mais PCRE ne prend pas en charge l’observation en largeur variable.

Autres conseils

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

devrait faire l'affaire avec la partie temps placée dans un groupe de capture.

le " new RegExp " Je ne suis pas sûr de (Java peut-être?). En Perl, vous pouvez obtenir la valeur suivante:

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

dans .NET, ce qui suit devrait fonctionner ...

  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();

Vous pouvez également utiliser une capture nommée si vous souhaitez utiliser quelque chose de moins ambigu. puis l'index dans le groupe de capture.

essayez d'utiliser

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

$ indique la fin de la chaîne

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top