2016-03-28 6 views
0

Gibt es eine einfache Möglichkeit, beide Klammern in einer einzigen Codezeile zu grep. Ich möchte die Öffnung [ und schließen ] Klammer in einer einzigen Zeile des Codes enthalten. Ich habe alle möglichen Kombinationen ausprobiert, aber es scheint nur eins nach dem anderen möglich zu sein. Ich habe folgende:Finden Sie Klammern mit grep

if(grepl("\\[+",CAS)) return(FALSE) 
+1

'Grepl („[\\ [\\]]“ , CAS, perl = T) ' – fanli

Antwort

3

Wenn das erste, was in einer Zeichenklasse (in []) eine eckige Klammer ist (entweder ein), dann ist es buchstäblich eher interpretiert als als Teil der Zeichenklasse. Dies bedeutet, dass Sie [[] verwenden können, um eine einzelne öffnende eckige Klammer und []] mit der schließenden übereinstimmen. Sie können sogar die Dinge nach der Klammer hinzufügen (aber wenn Sie beide passen wollen, dann ist es am besten [][] zu verwenden

einige Beispiele:.

> tmp <- c('hello','[',']','[]', '[a-z]') 
> grep('[[]', tmp) 
[1] 2 4 5 
> grep('[]]', tmp) 
[1] 3 4 5 
> grep('[[].*[]]', tmp) 
[1] 4 5 
> grep('[[]az-]', tmp) 
integer(0) 
> grep('[[]]', tmp) 
[1] 4 
> grep('[][]', tmp) 
[1] 2 3 4 5 
> grep('[][az-]', tmp) 
[1] 2 3 4 5 
> regexpr('[][az-]*', tmp) 
[1] 1 1 1 1 1 
attr(,"match.length") 
[1] 0 1 1 2 5 
attr(,"useBytes") 
[1] TRUE