Reguljärt uttryck för datum

Permalänk
Medlem

Reguljärt uttryck för datum

Hej!
Jag har en textfil (.txt) med en mängd olika sätt att skriva datum på, nu är det som så att jag undrar om någon kunde hjälpa mig att skriva ett reguljärt uttryck för att märka upp alla dessa med taggar runt om, såhär <date>2008.12.12</date> eller <date>12 december 2008</date> det finns ju fler sätt att skriva datum på men ville bara visa hur jag ville att det skulle märkas upp. Hade tänkt använda mig utav sed för följande uppgift och hoppas på lite hjälp. Det står ju mycket mer text än bara datum i filen men som sagt dem jag skulle vilja märka upp, hoppas att någon unixfantast kan hjälpa mig med detta

Permalänk
Permalänk
Medlem

Att skriva ett regex som klarar *alla* datumformat, på *alla* språk, kan du helt enkelt glömma.

Annars om du vill skriva ett regex som klara just dina (få) varianter på datum så är det RTFM som gäller antar jag

Kör perl, inte sed.

Permalänk

Varför glömma det? Tar ett tag, men visst går det.

Tror nog du kan få bättre hjälp io programmerings delen av forumet dock.

Visa signatur

[Geek, Dad, Programmer, RC enthusiast, Technology evangelist]

Permalänk

Du kanske helt enkelt får göra flera regex och parsea filen flera gånger.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av emigrating12
Varför glömma det? Tar ett tag, men visst går det.

Tror nog du kan få bättre hjälp io programmerings delen av forumet dock.

Nej det går inte. I amerika så används ibland formatet månad/dag medan på andra platser används dag/månad vilket skulle vara omöjligt att urskilja mha regex för många datum.

Permalänk

Det är jag fullt medveten om, men man kan ändå komma fram till en lösning som fungerar felfritt i 99% av tillfällen.

Jag har själv skrivit just en sådan men pga IP, copyright, bla bla bla kan jag inte dela med mig - men det går.

Sedan är ju frågan om TS verkligen behöver internationellt stöd i sin RegEx eller inte - om alla hans artiklar kommer från samma "region" är det onödvändigt att kunna ta hand om f.ex Amerikanska datumformat och han kan komma upp med en RE som tar både 12.15.[20]08, december 15 [20]08, 15 dec [20]08 osv.

Visa signatur

[Geek, Dad, Programmer, RC enthusiast, Technology evangelist]

Permalänk
Medlem

finns det ingen bestämd eller vedertagna format för att hantera datum kommer det att bli problem framöver. börjar en målgrupp använda systemet mer än andra kommer delmängden missvisande information bara att öka.
din procentsats som du påvisar är därför felaktig.
Det här skulle jag anse vara en markant svaghet i vilket system som helst.

fastställ standardformat och liknande vagheter för att få bästa resultat. i slutet är det nöjda användarna och minimalt förvaltningsarbete för dig själv eller systemansvarige som räknas. nu vet du om en lucka - täpp till den!!

de flesta användare accepterar fastställda format om du förklarar att informationen annars sannolikt kommer att användas på ett felaktigt sätt.

ett annat sätt istället för regexxp är att läsa av användarens locale och nyttja denna vid en parsning av datumet. objektorienterade språk som java och c# (.net) har bra stöd för detta.

Visa signatur

P[a]cman äter spöken så ofta han kan.

citera mig, annars är risken överhängande att jag inte hittar tillbaka.

Permalänk
Medlem

Ge exakta exempel på hur indatan och hur utdatan ska se ut.

Visa signatur

01001000 01100001 01110010 00100000 01100100 01110101 00100000 01110100 01110010 10000110 01101011 01101001 01100111 01110100 00111111 00100000 00111010 00101001

Permalänk
Avstängd

Du kan inte komma och säga "hej, jag behöver ett regex, skriv ett åt mig!" det betyder "jag är för lat, gör jobbet åt mig".

Du får posta "Jag har försökt skriva ihop ett regex som ser ut så här /^[az09]{4}$/, jag har även provat att ändra az till AZ och :alphanum: men det fungerar fortfarande inte. Vad för jag för fel?"

Fel: "Jag vill ha X, skriv det åt mig".
Rätt: "Jag vill ha X, jag har försökt med A, B, C och ändrat Y till Z för att uppnå X men det fungerar inte, jag tror att är på grund av A eller B, men kan även vara C."