2016-03-23 20 views
0

23. Oktober 2016 um 10:00 UhrRegex - Match Buchstaben mit unterschiedlichen Anpassungsmuster

Von oben Zeichenfolge muss ich zunächst drei Buchstaben erfassen.

Dann alles bis zum Ende des ersten Wortes ignorieren.

Schließlich alles andere erfassen.

sollte fertige Ausgabe entsprechen, wie - 23. Oktober 2016 um 10:00 Uhr

+2

Haben Sie schon etwas probiert? Enthalten Sie, was Sie versucht haben und welcher Teil davon in Ihrer Frage nicht funktioniert. – dsh

+0

Ich versuchte es mit diesem, aber kein Glück [A-Za-z] {3} ([^ \ s] +). * – Kasun

+0

Sie beschrieben das grundlegende Layout des Ausdrucks, also versuchen Sie es einfach und erstellen Sie es. Wenn du Probleme hast, zeige uns, was du versucht hast und wir helfen dir weiter. – Thomas

Antwort

1

Sie könnten das folgende Muster versuchen. $1 sind die ersten 3 Buchstaben des ersten Wortes; $2 ist der Rest des Wortes; $3 ist der Rest der Zeichenfolge.

String input = "October 23 2016 at 10:00 AM"; 
System.out.println(input.replace("^([A-Za-z]{3})([^ ]*)(.*)$", "$1$3")); 

Ausgang:

Oct 23 2016 at 10:00 AM 
0
string date = "October 23 2016 at 10:00 AM"; 
var result = Regex.Replace(date, @"(\w{3})\w*(\d+ \d+ at \d+:\d+ \w{2})","$1$2"); 
0

Dieses Muster passt auf, und geben Sie zwei Capture-Gruppen für die gewünschten Teile zu extrahieren.

^(.{3})(?:.*?\b)(.*)$ 

Jeder Teil des Musters ist documented in the Java API

ich eine Nicht-Capture-Gruppe für den Teil verwendet, um Sie zu verwerfen, und ein nicht gieriges Spiel, so dass es nicht zu viele Zeichen überein. Ich habe das Muster am Anfang und am Ende der Eingabe verankert. Ich war jedoch nicht einschränkend, in welchen Zeichen ich passte: irgendein Zeichen und nicht nur Buchstaben, Zahlen oder bestimmte Zeichensätze.

0

Dieser arbeitete für mich ...

s/^([A-Za-z]{3})[A-Za-z]*(.*)$/\1\2/g. 

Dank.