我有一个字符串说“a.b”,我想替换“。”用“_”。
gsub(".","_","a.b")
不起作用。匹配所有字符。
gsub("\.","_","a.b")
给我一个错误。
阅读?gsub上的文档没有用处!
那么如何直截了当地做这件事呢?
答案 0 :(得分:21)
.
匹配任何字符。使用.
转义\
,以字面上匹配.
。
\
本身也应该被转义:
> gsub("\\.", "_", "a.b")
[1] "a_b"
答案 1 :(得分: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"
答案 2 :(得分:3)
尝试这样:
gsub("[.]","_","a.b")
答案 3 :(得分:3)
尝试[[:punct:]]正则表达式语法,为“。”本身就是字符串中存在的标点字符。
gsub("[[:punct:]]","_","a.b")
输出:[1] "a_b"
答案 4 :(得分:0)
如果您更喜欢使用 stringr
(tidyverse
软件包的一部分)
str_replace_all("ghyg.lo.poi","[.]","_")