2015-08-02 11 views
6

Sto cercando di estrarre i caratteri prima e dopo il carattere "/" usando R.caratteri estrarre fino a "/" utilizzando R

Per esempio, posso ottenere i tag con il seguente:

s <- "hello/JJ world/NN" 

# get the tags 
sapply(s, function(x){gsub("([a-z].*?)/([A-z].*?)", "\\2", x)}) 

che restituisce

"JJ NN" 

Tuttavia, quando si tenta di estrarre i caratteri prima del "/" o il "token", utilizzando il seguente:

sapply(s, function(x){gsub("([a-z].*?)/([A-z].*?)", "\\1", x)}) 

ottengo

"helloJ worldN" 

Come posso ottenere "ciao mondo" e perché è la prima lettera del tag scivolare dentro?

+0

stai usando saply su un vettore di lunghezza uno. perché non solo 'gsub ('/ [az] +', '', s, ignore.case = TRUE)' e 'gsub ('[az] + /', '', s, ignore.case = TRUE)' ? – rawr

+0

Prova 'gsub ('/ \\ w +', '', s)' – akrun

risposta

3

Penso che il motivo per cui le lettere rimangano nell'output sono le espressioni regolari. Il [A-Z] (ci deve essere Z, credo z è un errore di battitura - vedi [A-Za-z] Shorthand class?) è OK, ma è seguito da un pigro dot gruppo .*? corrispondenza che può corrispondere 0 o un numero illimitato di caratteri diversi da quelli di nuova riga il meno possibile. Quindi, è will match none.

Hai bisogno di un quantificatore + corrisponda a 1 o più caratteri e applicarlo alla classe di caratteri [a-zA-Z]:

s <- "hello/JJ world/NN" 
sapply(s, function(x){gsub("([a-zA-Z])/[a-zA-Z]+", "\\1", x)}) 

Vedi demo

ho rimosso il secondo gruppo dal momento che non lo si utilizza.

+0

oppure potresti semplicemente copiare/incollare l'output sotto il codice? – rawr

Problemi correlati