PDA

View Full Version : RegExp optional match


olsn
2009-10-27, 17:09
Jag vill plocka ut 3 substrings ut 3 substrings ut en sträng som ser ut så här men kan variera lite.
pubDate = "2009-10-24T19:29:27.332+02:00"

De jag vill ha ut är:
1. 2009-10-24
2. 19:29:27
3. +02:00 (optional)

Dock ska jag kunna få ut #1 och #2 trots att #3 inte matchas.

Så här hade jag tänkt mig men #3 kommer aldrig med. Tar jag bort sista frågetecknet kommer det med ju, men då får jag inte ut #1 och #2 om #3 inte skulle finnas i strängen.

tag.Pattern = "^(\d{4}-\d\d-\d\d)T(\d\d:\d\d:\d\d).*((\+|-)(\d+:\d\d))?"
Set objMatch = tag.Execute(pubDate)
Datetime = objMatch.Item(0).Submatches(0) &" "& objMatch.Item(0).Submatches(1) &" "& objMatch.Item(0).Submatches(2)

preben
2009-10-27, 18:03
http://weitz.de/regex-coach/

Du verkar duktig på RegEx! Kanske detta programmet kan vara nåt för dig att testa?

Jag är inte helt hemma i denna matchen...

voigtann1
2009-10-27, 18:27
Mja, det finns ju bättre sätt att skriva ditt uttryck

Fråga, är det det ända som kommer finnas på radan, eftersom du ha ^ i början.

om det är så så kan den se ut:
(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}).*((?:[\+-]\d+:\d{2})|$)

Tycks inte fungera i ASP, tror du behöver köra två matchningar för att du skall få igång det som du vill.

nitro2k01
2009-10-27, 18:32
Verkar funka om man görer så här:^(\d{4}-\d\d-\d\d)T(\d\d:\d\d:\d\d)\.?\d*([+\-]\d+:\d\d)?$Edit: $ på slutet, inspirerat av voigtann1.

olsn
2009-10-28, 10:19
Det här fungerade kanon! Tack!

Verkar funka om man görer så här:^(\d{4}-\d\d-\d\d)T(\d\d:\d\d:\d\d)\.?\d*([+\-]\d+:\d\d)?$Edit: $ på slutet, inspirerat av voigtann1.

voigtann1
2009-10-28, 10:23
ändra dock \d\d till \d{2} ser inte direkt snyggt ut om man skall vara ärlig ;)

nitro2k01
2009-10-28, 10:58
ändra dock \d\d till \d{2} ser inte direkt snyggt ut om man skall vara ärlig ;)Jag funderade också på det, men kom fram till att olsn nog gör så för att \d\d är ett tecken kortare.

voigtann1
2009-10-28, 11:08
det är enklare för en människa att läsa det, "jaha, nu är det två tal som skall vara här"... men det kanske är jag.

olsn
2009-10-28, 12:22
ändra dock \d\d till \d{2} ser inte direkt snyggt ut om man skall vara ärlig ;)

Hehe, jag insåg inte vilken stilmiss det var :e

onkelborg
2009-10-28, 17:03
\d\d är väl snyggare när det bara handlar om två? Blir så mycket skrot annars helt plötsligt