Java - Extrahiere das Datum aus der Zeichenkette mit Regex- Failing

7

Ich versuche, 2 Daten aus einer Zeichenfolge mit Regex zu extrahieren - und aus irgendeinem Grund - die Regex extrahiert keine Daten - das ist mein Code:

%Vor%

Mein String-Desc ist: "coming from the 11/25/2009 to the 11/30/2009" und ich bekomme ein Null-Array zurück ...

    
DasDas 03.09.2013, 11:33
quelle

5 Antworten

2

Sie haben den Monat und den Tag des Monats rückgängig gemacht, und (?:,) erfordert am Ende jedes Datums ein Komma. Versuchen Sie es stattdessen:

%Vor%     
Syon 03.09.2013, 11:41
quelle
10

Ihre Regex stimmt zuerst mit dem Tag und dann mit dem Monat (TT / MM / JJJJ) überein, während Ihre Eingaben mit Monat und dann Tag (MM / TT / JJJJ) beginnen.

Außerdem muss auf Ihre Daten ein Komma folgen, damit sie übereinstimmen (der (?:,) -Teil).

Dieser sollte Ihren Bedürfnissen entsprechen:

%Vor%

Diagramm von Debuggex .

    
sp00m 03.09.2013 11:41
quelle
6

3 Probleme:

1) Sie versuchen, das Datum mit dem Format dd/MM/YYYY zu analysieren, wobei Ihre Regex das Format MM/dd/YYYY hat.

2) Sie haben vergessen, count in der while-Schleife zu erhöhen.

3) Der (?:,) -Teil am Ende der Regex ist nutzlos.

Dieser Code funktioniert auf meinem Computer:

%Vor%

Test :

%Vor%

Ausgabe :

%Vor%     
Arnaud Denoyelle 03.09.2013 11:43
quelle
0

Ein Datumsmuster-Erkennungsalgorithmus, um nicht nur Datumsmuster zu identifizieren, sondern auch wahrscheinliches Datum im Java-Datumsformat abzurufen. Dieser Algorithmus ist sehr schnell und leicht. Die Verarbeitungszeit ist linear und alle Daten werden in einem Durchgang identifiziert. Der Algorithmus löst das Datum mithilfe des Baumtraversenmechanismus auf. Strukturdatenstrukturen werden benutzerdefiniert erstellt, um unterstützte Datums-, Zeit- und Monatsmuster zu erstellen.

Der Algorithmus bestätigt auch mehrere Leerzeichen zwischen Datumsliteralen. Z.B. DD DD DD und DD DD DD werden als gültige Daten betrachtet.

Folgende Datumsmuster werden als gültig betrachtet und sind mit diesem Algorithmus identifizierbar.

dd MM (MM) yy (yy) yy (yy) MM (MM) TT MM (MM) dd yy (yy)

Wo M Monatsliteral ist, ist das Alphabetformat wie Jan oder Januar

Zulässige Trennzeichen zwischen Daten sind '/', '\', '', ',', '|', '-', ''

Es erkennt auch das nachfolgende Zeitmuster im folgenden Format hh (24): mm: ss.SSS am / pm hh (24): mm: ss am / pm hh (24): mm: ss am / pm

Die Auflösungszeit ist linear, es wird kein Mustervergleich oder Brute Force verwendet. Dieser Algorithmus basiert auf der Traversierung von Bäumen und gibt zurück, die Liste des Datums mit folgenden drei Komponenten - Datumsstring im Text identifiziert - konvertiert & amp; Formatierte Datumszeichenfolge - SimpleDateFormat

Mithilfe der Datumszeichenfolge und der Formatzeichenfolge können Benutzer die Zeichenfolge basierend auf ihren Anforderungen in Objekte konvertieren.

Die Algorithmusbibliothek ist verfügbar unter maven central.

%Vor%

Der Beispielcode, um dies zu verwenden, ist unten.

%Vor%

Ausgabe: [LocalDateModel {originalText = 2015-januar-10 18: 00: 01.704, dateTimeString = 2015-1-10 18: 00: 01.704, conDateFormat = JJJJ-MM-TT HH: mm: ss.SSS, Start = 18, Ende = 46}]

Detaillierter Blog unter Ссылка

Die vollständige Quelle ist auf GitHub unter Ссылка

verfügbar     
vaibhav singh 06.06.2017 03:47
quelle
0

LocalTime.parse anstelle von regex

Regex kann für solch ein Problem übertrieben sein.

Sie könnten einfach die Zeichenfolge auf SPACE-Zeichen aufteilen und versuchen, jedes Element als LocalDate . Wenn die Analyse fehlschlägt, fahren Sie mit dem nächsten Element fort.

%Vor%

Sehen Sie sich diesen Code live bei IdeOne.com an .

  

Daten: [2009-11-25, 2009-11-30]

    
Basil Bourque 17.10.2017 19:22
quelle

Tags und Links