2010-12-12 9 views
2

Ich habe eine Zeichenfolge mit einem Feld wie folgt aus: id = "ID-120-1, ID-141-5, ID-92-5, N/A"Wiederholung genannt Einfanggruppen

Ich mag würde um nur die "IDs" zu einer benannten Erfassungsgruppe zu erfassen (dh ohne die "N/A" oder andere Gegenstände, die sich einschleichen könnten). Ich dachte, das könnte funktionieren, aber kein Glück:

\bid=\"(?<id>(ID-\d+-\d+)+) 

Irgendwelche Ideen?

Antwort

1

Der Ausdruck, den Sie nur eine verwenden zurück, weil Sie auf dem Start der ID zählen anwesend zu sein vor jedem ID-Wert. Die folgende Anpassung sollte das beheben.

(?:(?:=\")|(?:,\s))(?<id>(?:ID-\d+-\d+)*) 

wäre eine weitere Option, um nur die id = Drop „lassen Sie

(?<id>(?:ID-\d+-\d+)) 

zusammen Teil Oder Sie könnten das hinzufügen“, "Check auf das Ende der ID, um sicherzustellen, Sie sind in Attribut.

(?<id>(?:ID-\d+-\d+))(?:(?:,\s)|(?:")) 
+0

Super! Vielen Dank für die Antworten und Erklärungen! –

0

Sie benötigen würden auch Kommas und Räume zu erfassen, wie sie in der Zeichenfolge wiederholt werden:

\bid=\"(?<id>(ID-\d+-\d+,)+) 
0

glaube ich, was Sie versuchen, mit reinem regex ist nicht möglich zu tun, vor allem, wenn IDs und ‚N/A‘ miteinander vermischt werden können. Sie werden eine Schleife in Ihrem Programm haben müssen, oder Wenn Sie Perl oder PHP verwenden, können Sie Code im Ersatzteil der Regex (/e Schalter) ausführen, um die Übereinstimmungen zu einem Array hinzuzufügen.