Frage

Ich mag die Zeit passen (10,00) aus einem String mit Datum und Uhrzeit ( „21.01.08 10.00“). Ich verwende den folgenden regulären Ausdruck:

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

Aber dies entspricht 21,01 von 21.01.08 und 10.00.

Ich bin mit PCRE als mein regualar Ausdruck Motor.

Update:

Es tut mir leid, ich mehr hätte mehr klar. Die Daten und Zeit sind Teil einer größeren Zeichenfolge. Ich mag die Zeit von dieser Zeichenfolge extrahieren.

Zum Beispiel:

"On 21.01.08 von 10.00 Uhr eine Party in der Bibliothek stattfinden wird" „21.08.08 - Um 10:00 Uhr wird es eine Party“ „Am 21.08.08 Sie sind für eine geplante .... Die ... um 10.00 Uhr beginnen wird“

Ist das möglich?

War es hilfreich?

Lösung

Ihre ursprüngliche regex hat nicht funktioniert, weil \b (Wortgrenze) passt auf die „“ in "21.01.08". Sie müssen die Grenzen robuster codieren:

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

Dies fängt die Zeit, in eine der beiden Schreibweisen Sie verwendet, während Daten auszuschließen. Beachten Sie, dass es nicht die Zeit validieren. Zum Beispiel wäre es „88:99“ Validieren der Zeit möglich ist, passen aber kompliziert das Muster deutlich und ist wahrscheinlich übertrieben für die meisten Situationen.

Es wäre schön, einen Blick hinter der Verwendung anstelle der Nicht-Erfassung Gruppierung aber PCRE nicht unterstützen variabler Breite Blick hinter.

Andere Tipps

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

sollte den Trick mit der Zeit Teil tut in einer Capture-Gruppe gesetzt wird.

die "new RegExp" Ich bin nicht sicher (Java vielleicht?). In Perl können Sie den Wert wie ...

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

in .NET sollte die folgende arbeiten ...

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

Sie könnten auch einen Named-Capture wenn Sie wollen nicht eindeutig etwas weniger verwenden, dann wird der Index in die Capture-Gruppe.

versuchen Sie es mit

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

$ gibt das Ende der Zeichenfolge

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top