2017-11-25 1 views
1

Ich möchte die Zeichenfolge in das folgenderegex erfassen Muster mit nicht-fester Länge Lookbehind - split String

S <- "No. Ok (whatever). If you must. Please try to be careful (shakes head)." 

[1] No. 
[2] Ok (whatever). If you must. 
[3] Please try to be careful (shakes head). 

Das Muster spalten ist das erste . vor jedem (...).

Ich bin vertraut mit (?<=...) (d. H. Positive Lookbehind), aber das scheint nicht mit nicht festen Längenmustern zu arbeiten. Ich würde gerne wissen, ob ich falsch liege mit positivem Lookbehind oder wenn es eine Regex-Magie dafür gibt. Vielen Dank!

+1

Sorry, ich bin nicht sicher, wie man am besten dann zu erklären. Ich versuche, 'S' durch Punkte (' .') aufzuspalten, die vor offenen Klammern stehen ('('). Zum Beispiel ist die Zeit nach 'No' die erste, die nach dem' (' nach 'Ok' ... – CPak

Antwort

2

Beachten Sie, dass ich nicht viel über Ruby weiß, aber es sollte etwas wie eine split Methode, die ein Regex-Muster als Trennzeichen verwendet und teilen Sie die Zeichenfolge entsprechend.

verwenden regex:

(?<=\.) (?=[^.]+?\(.+?\)) 

Das sieht nach einem Leerzeichen. Hinter dem Raum muss ein Punkt (?<=\.) sein. Nach ihm (?=, muss es eine Reihe von Zeichen, die nicht Punkte sind [^.]+?, und dann ein Paar Klammern mit etwas in \(.+?\).

Versuchen Sie es online: https://regex101.com/r/8PcbFJ/1

+0

Awesome, vielen Dank! Die Verwendung von' [^.] +? 'ist sehr lehrreich. – CPak

+0

Für andere SO-Benutzer, in' R', 'strsplit (S," (? <= \\.) (? = [^.] +? \\ (. +? \\)) ", perl = TRUE)' gibt das beabsichtigte Ergebnis – CPak