2016-06-10 2 views
0

Ich arbeite an einem Regex-Problem, das ich nicht knacken kann. Ich habe eine Liste von Strings, die etwa wie folgt aussieht:Regex erste Instanz vor einem bekannten String, aber nach der Wiederholung String

"Some Leading Words, "ind": "ind1", "primary":true, some more words, "ind": "ind2", "primary":false"

Ich mag würde die primäre Anzeige zurück zu ziehen. In diesem Fall wäre das ind1. Dies kann erreicht werden, mit:

\bind\b(.*?)"primary":true

Oder zumindest die nahe kommt ... Ich habe immer noch den „ind“ und den „primary: true“ Teil, aber ich tue dies tatsächlich in Excel mit dem VBScript Reguläre Ausdrücke 5.5 Bibliothek so kann ich RIGHT, LEFT, MID und SEARCH mein Weg um Dinge, die ich weiß, ich möchte nicht mit einschließen.

Das Problem, das ich habe, ist, wenn der primäre Indikator an zweiter Stelle in der Zeichenfolge ist.

"Some Leading Words, "ind": "ind1", "primary":false, some more words, "ind": "ind2", "primary":true

Auf diesem, habe ich am Ende mit allem, was zwischen dem ersten und dem ind"primary":true bis die wollen mehr als ich ist.

(FYI:. Ich JSON vom NPI API site Parsen und müssen jede Ärzte primäre Taxonomie zurück, wenn dieser Kontext heraus hilft)

Antwort

1

So, hier ist eine Idee. Fügen Sie das Komma vor dem "primary":true hinzu und ändern Sie dann den Punkt . in eine Zeichenklasse, die alles außer einem Komma erlaubt.

\bind\b([^,]*?), "primary":true 

, die Sie geben, was Sie wollen.

Aber, wenn Sie zusammen mit Ihrem Wert das Extramaterial wollen nicht, Sie so etwas wie diese verwenden:

\bind\b": "([^,]*?)", "primary":true 

Here is a demo

+0

Bingo. Schätze die Hilfe. –