RegEx und passenden Codes von rechts nach links
Frage
ein wenig mit dem RegEx stuggling, ich habe 4-Codes in einer Zeichenfolge
CODE4: CODE3: CODE2: CODE1
Jeder Code ist optional abgesehen von CODE1
So konnte ich ab haben: bc: de: fg
oder
bc :: fg
von
ab ::: fg
In jedem Fall des oben CODE1 = fg dnd für das liebe Leben von mir, dass ich nicht die Regex arbeiten kann,
Wäre einfach als Standard-String-Parsing zu tun, aber unforunatly wegen Buisness Objekte in Bedürfnissen über regex :-( getan werden und zurück über ein vb.net RegEX.matche, Gruppen ( „Code1“) fg (I hoffen, dass Sinn)
machtVielen Dank im Voraus für jede Hilfe
mit etwas RegEx Ended bis dass der Job nicht, bisschen chaotisch, aber es funktioniert
(^(?<code1>[\w]*)$)|(^(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code4>[\w]*):(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)
Ta alle
Lösung
Es gibt keine Notwendigkeit, hier einen regulären Ausdruck zu verwenden.
Ich weiß nicht, welche Sprache Sie verwenden, aber teilen Sie die Zeichenfolge auf ‚:‘ und Sie werden eine Reihe von Codes
.Wenn Sie wirklich wollen einfach nur bestätigen, ob eine Zeichenfolge für diese gilt dann
/(\w*:){0,3}\w+/
entspricht Ihrer Beschreibung und die wenigen Beispiele, die Sie gegeben haben.
Andere Tipps
Ich bin mir nicht sicher, warum Sie die Codes von rechts nach links entsprechen haben. Verwenden Sie einfach einen regulären Ausdruck die Zeichenfolge auseinander zu nehmen:
/(.*):(.*):(.*):(.+)/
und dann haben Sie CODE1 in $ 4, CODE2 in $ 3, CODE3 in $ 2, CODE4 in $ 1.
(CODE1)?:(CODE2)?:(CODE3)?:CODE4
funktionieren würde - wenn die führende: keine Rolle spielen. Andernfalls, wenn Sie nicht führende Doppelpunkte haben kann, aufzuzählen:
(CODE1:(CODE2)?:(CODE3)?:|CODE2:(CODE3)?:|CODE3)?CODE4
Es gibt nichts besonderes über die Tatsache, dass der am weitesten rechts stehende Teil obligatorisch ist, und die am weitesten links gelegenen Teilen nicht.