2013-12-01 2 views
11

У меня есть строка say "a.b", и я хочу заменить "." с "_".R: Как заменить. в строке?

gsub(".","_","a.b") 

не работает как. соответствует всем символам.

gsub("\.","_","a.b") 

Только что дает мне ошибку.

Чтение документации на? Gsub не так уж полезно!

Итак, как это сделать прямолинейно?

+2

Попробуйте использовать GSUB ("\\", "_", "б") –

ответ

18

. соответствует любому символу. Escape . с использованием \ для соответствия . буквально.

\ сам также должен быть экранирован:

> gsub("\\.", "_", "a.b") 
[1] "a_b" 
+0

@downvoter, Любая причина для downvote? Пожалуйста, дайте мне знать, как улучшить ответ. – falsetru

3

попробовать так:

gsub("[.]","_","a.b") 
+1

'GSUB (" _", "б", фиксированный = TRUE) 'также работает;) –

7

Вы должны удвоиться избежать \\, спасаясь ., чтобы соответствовать буквальной точке и избежать \ также. Помните, что использование sub заменяет первое вхождение шаблона, gsub заменяет все вхождения.

string <- "a.b" 
sub('\\.', '_', string) 
[1] "a_b" 

string <- "a.b.c.d.e.f" 
gsub('\\.', '_', string) 
[1] "a_b_c_d_e_f" 

Вы также можете использовать sub или gsub с параметром fixed = TRUE. Это берет строку, представляющую шаблон, который вы ищете, поскольку он игнорирует специальные символы.

string <- "a.b" 
sub('.', '_', string, fixed = TRUE) 
[1] "a_b" 
3

Попробуйте [[: punct:]] синтаксис регулярных выражений, как "." сам по себе является символом пунктуации, присутствующим в строке.

gsub("[[:punct:]]","_","a.b") 

Выход: " "[1] "a_b"

Смежные вопросы