2016-07-22 9 views
-2

Ich muss erkennen und aus einer Zeichenfolge eine sich wiederholende Gruppe von Zeichen extrahieren und einen Teil jeder erfassten Gruppe auflisten.Wie wiederhole ich Gruppen in Regex (für C#)

Hier ist ein Beispiel für Zeichenfolge zu analysieren: "za ee Good1 End ds q starten good2 End df sds Start"

Mein Regex ist: ".*?(?::Start(.+)End.*?)+"

Erwartete Gruppen erwartet: , Good2, etc

Mein Regex-Capture ist falsch: es scheint, dass (?::Start(.+) als zu erfassende Gruppe betrachtet wird ...

Darf ich etwas verpassen? Danke!

+0

Ich denke, Sie brauchen nur 'starten End' (*.?). Keine Ahnung, wie deine Eingabe wirklich aussieht. Hast du da echte Sternchen oder formatiert es? –

+0

Hallo Wiktor keine astericks ... Nur für Fettschrift. – Francois

+0

Verwenden Sie also meine Regex mit 'Regex.Matches'. –

Antwort

0

Diese Regex den Job:

/(?<=Start)(.+?)(?=End)/g 
+0

Danke @baddger, ich habe diese Regex versucht ((? <= Start) (. +?) (? = Ende)) * (ohne ** für fette Schrift) und ich bekomme alle Zeichen einzeln nacheinander: "z", "a", "", "e ", etc ... Andere Idee? – Francois

+0

versuchen Sie die aktualisierte Antwort: p – baddger964

+0

Ja, ich bin jetzt näher ... :) Nur müssen Start-und Endgruppen verstecken ... Ihre Regex gibt "za e eStart", "Good1", "Endds dqStart", " Good2 "," Endsds df ". Aber danke für diese einfache Syntax mit <= und =. Ich habe versucht, sie zu verstecken, aber keine Rückkehr mit diesem: "(?: <= Start) (. +?) (?: = Ende)" – Francois

0

Warum dieses Muster nicht verwenden: \*{2}Start\*{2}(.*?)\*{2}End\*{2}

Für dieses Eingabestring: za e e**Start**Good1**End**ds dq**Start**Good2**End**sds df, fängt es Good1 und Good2.

können Sie sich hier mit ihm spielen: https://regex101.com/r/dG0dX6/2

+0

Sorry Andrew, du hattest Recht auch ... – Francois