.dcp
notamodbuthot
|
will eine GUID in einem string finden. solang der string allein ne GUID ist klappts, aber nicht, wenn davor oder dahinter noch zeichen stehen. Regex RE = new Regex("^((?-i:0x)?[A-Fa-f0-9]{32}|[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}|{[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}})$");
MatchCollection ReMatches = RE.Matches(content);
if (ReMatches.Count > 0)
{
foreach (Match m in ReMatches)
{
//do sumthin with it
}
}
string content ist immer eine zeile aus einer (text-)datei. bei "{936DA01F-9ABD-4d9d-80C7-02AF85C822A8}" und "936DA01F-9ABD-4d9d-80C7-02AF85C822A8" gibts ein match, bei "blabla{936DA01F-9ABD-4d9d-80C7-02AF85C822A8}blubb" aber nicht...halp?!  tia, .dcp
Bearbeitet von .dcp am 29.05.2009, 11:10
|
Hansmaulwurf
u wot m8?
|
Wenn das ein "oder" sein soll, dann fehlt dir ein |  edit:/ crap, ne das kanns nicht sein.. Ich hasse Regex, verwirren mich immer..
|
.dcp
notamodbuthot
|
die regex hab ich auch nur aus einem anderen projekt gecopypasted, daher hab ich keine ahnung, wo ich ein | einfügen soll  aber solange der ganze string eine GUID ist, funktionierts ja auch, aber er soll auch ein match finden, wenn die GUID von anderen zeichen umgeben ist. edit:  geht mir genauso.
|
siddhartha
Bloody Newbie
|
Wenn du das ^ und das $ in deinem RegEx wegbaust, dann sollte es funktionieren. Diese Zeichen stehen für den Anfang und das Ende eines Strings, wenn also davor bzw. danach noch was kommt, kann er nichts finden.
Hoffe, ich konnte dir weiterhelfen.
|
COLOSSUS
AdministratorGNUltra
|
Bitte poste ein Beispiel fuer einen (oder besser zwei) tatsaechliche Nicht-Matches, die du gerne gematcht haettest.
Ich kenne mich in der Win32-Welt nicht so gut aus - kann es ueberhaupt vorkommen, dass so eine GUID ohne literale { und } an Anfang und Ende auftritt?
|
quilty
Ich schau nur
|
Wie siddhartha schon richtig gesagt, gehören nur die 2 Zeichen weg und es sollte funktionieren. Entsprechender MSDN Link.
|
.dcp
notamodbuthot
|
danke, hab ich mittlerweile auch durch probieren rausgefunden  [0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}
die passt nur auf die GUID ohne { und }. @colo: genaue anforderungen hab ich noch nicht, wie so oft, wenn "mal eben was zwischendurch" gebraucht wird
|
vanHell
Tauren Marine
|
Mit dem Regexp .*([0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}).*
matcht er jede Zeile die einen GUID enthält, dann kanst mit m.Groups die Groups auslesen und in der ersten Group sollte dann nur der GUID stehn ohne klammern oder sonst irgendwas.
|
COLOSSUS
AdministratorGNUltra
|
Die .* am Anfang und Ende kann man sich schenken, wenn der Match eh zeilenweise passiert. Und statt [0-9a-fA-F] kann man laut POSIX auch [[:xdigit:]] schreiben, wenn einem das besser gefaellt. Das sollte speziell in diesem Fall mit den literalen Hyphens in der RE zur Lesbarkeit beitragen koennen.
|
vanHell
Tauren Marine
|
C# und POSIX passen aber irgendwie garned zusammen oder?
|
COLOSSUS
AdministratorGNUltra
|
Naja, die meisten RegEx-Libraries (egal welcher Programmiersprachen) lehnen sich entweder an POSIX RE, POSIX ERE, oder PerlCRE an. Alle drei Dialekte verstehen sich auf diese "POSIX Character Classes". Wenn es das also in irgendeiner Sprache/RE-lib nicht gibt, ist das imo als Bug zu reporten  Nur weil ein System als Ganzes nicht vollstaendig POSIX-konform ist, heiszt das nicht automatisch, dass es nicht trotzdem Teile von POSIX implementiert.
|
vanHell
Tauren Marine
|
Naja, die meisten RegEx-Libraries (egal welcher Programmiersprachen) lehnen sich entweder an POSIX RE, POSIX ERE, oder PerlCRE an. Alle drei Dialekte verstehen sich auf diese "POSIX Character Classes". Wenn es das also in irgendeiner Sprache/RE-lib nicht gibt, ist das imo als Bug zu reporten  Bei einer 3rd Party library würd ich dir recht geben. Aber bei den Regex Classen die beim .Net framework dabei sind intressiert das sicher keinen und Microsoft sicher am allerwenigsten. Eigentlich kann man froh sein das sie die wirklich wichtigen sachen ned neu erfunden haben.
|
COLOSSUS
AdministratorGNUltra
|
Du scheinst recht zu haben. Zumindest finde ich hier nichts Entsprechendes: http://msdn.microsoft.com/en-us/library/20bw873z.aspxTjo, dumm gelaufen. Wenn man bedenkt dass sie jeden moeglichen Shit da reingeworfen haben ( IsGreekandCoptic - wtf?), haetten die alnum, alpha, print, digit, xdigit und Co. auch nicht geschadet. Wenn Hanlon's Razor nicht waere, wuerde ich ihnen ja unterstellen, dass das aufgrund irgendeiner obskuren, boeswilligen Absicht gemacht wurde
|
jives
And the science gets done
|
Wenn Hanlon's Razor nicht waere, wuerde ich ihnen ja unterstellen, dass das aufgrund irgendeiner obskuren, boeswilligen Absicht gemacht wurde   Wie so oft bei MS-"Lösungen"...
|
corny
Little Overclocker
|
man kann auch nicht alles haben
Bearbeitet von corny am 31.05.2009, 11:08
|