2017-01-13 11 views
1
ist

Ich bin mir sicher, dass dies ein Duplikat ist, aber ich kann es nicht finden.Zeichenkette zwischen [und] extrahieren nur wenn + zwischen [und]

Der nächstgelegene ich bisher gefunden habe ist:

Extract info inside all parenthesis in R

Ich wünsche jedes Spiel aus einer Zeichenfolge zu extrahieren, die mit einem [ beginnt, endet mit einem ] und hat eine + Plus zwischen diese Klammern. Der reguläre Ausdruck, den ich basierend auf einer früheren Antwort zusammengestellt habe, ist etwas zu gierig.

library(magrittr) 

str <- "[a] , [a + b] + [b] , [b - q] , [d - e + f]" 

gregexpr(pattern = "(?=\\[).*?[+].*?(?<=\\])", 
     text = str, 
     perl = TRUE) %>% 
    regmatches(x = str, 
      m = .) 

Das gibt

[[1]] 
[1] "[a] , [a + b]"    "[b] , [b - q] , [d - e + f]" 

wo, was ich will

ist
[[1]] 
[1] "[a + b]"    "[d - e + f]" 
+0

Was möchten Sie tun es in Fällen zurück wie „[a - [b + c]] "oder" [a + [b - c]], [a] "? – LarsH

+0

Ich hatte nicht über Verschachtelung nachgedacht, aber Tot's Antwort ist ausreichend für meine Notwendigkeit, '+' zwischen Klammern zu verbieten. – Benjamin

Antwort

2

Wie wäre:

\\[[^]+]+[+][^]]+\\] 
+0

Das ist es. Und sieht so viel weniger einschüchternd aus. – Benjamin

Verwandte Themen