2011-10-02 19 views
7

Ho un corpus: txt = "un livello modellato all'interno di un pattern microelettronico." desidero sostituire il termine "pattern" esattamente con "forma", provo a scrivere un codice:Come sostituire la stringa esattamente con gsub()

txt_replaced = gsub("pattern","form",txt) 

Tuttavia, il corpus responsed in txt_replaced è: "uno strato formato all'interno di un modulo microelettronico. "

Come si può vedere, il termine "modellato" viene erroneamente sostituito da "formato" perché parti di caratteristiche in "fantasia" corrispondono a "modello".

Vorrei chiedere se posso sostituire esattamente la stringa utilizzando gsub()? Cioè, solo il termine con corrispondenza esatta deve essere sostituito.

Ho sete di una risposta come di seguito: "uno strato modellato all'interno di una forma microelettronica."

Grazie mille!

+3

trovare questa domanda: http://stackoverflow.com/questions/6528258/help-with-complete-word-matching-using-grepl-in-r – kohske

risposta

21

Come ha osservato @koshke, una domanda molto simile è stata già fornita (da me). ... Ma quello era grep e questo è gsub, così ti risponderò di nuovo:

"\ <" è una sequenza di escape per l'inizio di una parola, e ">" è la fine. In stringhe R è necessario fare doppio le barre inverse, quindi:

txt <- "a patterned layer within a microelectronic pattern." 
txt_replaced <- gsub("\\<pattern\\>","form",txt) 
txt_replaced 
# [1] "a patterned layer within a microelectronic form." 

Oppure, si potrebbe utilizzare \b invece di \< e \>. \b corrisponde a una parola di confine in modo che possa essere utilizzato da entrambi i lati>

txt_replaced <- gsub("\\bpattern\\b","form",txt) 

noti inoltre che se si desidera sostituire una sola occorrenza, si dovrebbe usare sub invece di gsub.