2015-08-05 9 views
5

Consentitemi di utilizzare il seguente esempio per illustrare.Comportamento di espressioni regolari non simmetriche impreviste di < and > in R

str = "we are friends" 

Il doc Guida dice che

I simboli \ < e \> corrispondere alla stringa vuota all'inizio e fine di una parola.

Quindi, si prevede che si verifichi quanto segue, in cui uno spazio bianco viene aggiunto alla fine di ogni parola.

gsub("\\>"," ", str) 
[1] "we are friends " 

Tuttavia, il motivo per cui non funziona quando si utilizza

gsub("\\<"," ", str) 
[1] " w e a r e f r i e n d s" 

qualcuno può spiegare perché questo accade? e cosa devo fare se voglio aggiungere uno spazio bianco in più in cima a ogni parola?

+0

Forse 'gsub ('\\ b (? = \\ w)', '', str, perl = TRUE)' – akrun

+2

Ancora un altro commento rip-off, @akrun :) –

risposta

1

E 'abbastanza strano, ma penso che questo sia documented as a warning:

POSIX 1003.2 modalità di gsub e gregexpr non funziona correttamente con Word-confini ripetute (ad esempio, pattern = "\b"). Utilizzare perl = TRUE per tali corrispondenze (ma potrebbe non funzionare come previsto con input non ASCII, poiché il significato di 'word' dipende dal sistema).

Quindi, utilizzare \\b(?=\\w) o (?<!\\w)\\b con perl=T:

str = "we are friends" 
gsub('(?<!\\w)\\b', ' ', str, perl=T) 

Vedi demo

uscita: [1] " we are friends".

+0

Funziona come un fascino. Potresti spiegare cosa (? wen

+0

'(?

+0

Poiché '\\ b' corrisponde tra caratteri alfanumerici e non alfanumerici, e quindi può corrispondere sia all'inizio che alla fine delle parole, il lookbehind lo limita solo per corrispondere solo all'inizio delle parole. –

Problemi correlati