我正在处理许多字符串。我意识到我可以使用read.table()
来阅读它们,但是我必须事先清洗它们。
我具有以下一般结构:
Request(123): \n Element1: 123123 \n Element2: 456456
我只希望删除第一次出现的分号:
,而不删除其余的分号。
Request(123) \n Element1: 123123 \n Element2: 456456
让第一个字符串存储在test
中。阅读了几个线程之后,我尝试了.*
:
gsub(pattern = ".*:", replacement = "", x = test)
我知道您可以在make the searching "lazy"上使用问号,但我无法使其正常工作。
答案 0 :(得分:2)
g
中的gsub
代表 global ,表示它将与所有匹配项匹配。如果您使用sub
而不是gsub
,则只会匹配并替换第一个匹配项。有关详细信息,请参见?gsub
,位于说明:
sub
和gsub
分别替换第一个和所有匹配项。
并且,如果您只想替换冒号,则您的模式应该仅为":"
,".*:"
将匹配并替换最后一个冒号中的所有内容。如果要替换第一个冒号之前的所有内容,则可以使用sub
和?
来使*
不贪婪。
x = "Request(123): \n Element1: 123123 \n Element2: 456456"
## match everything up through last colon
sub(".*:", "", x)
# [1] " 456456"
## not greedy, match everything up through first colon
sub(".*?:", "", x)
# [1] " \n Element1: 123123 \n Element2: 456456"
## match first colon only
## since we don't need regex here, fixed = TRUE will speed things up
sub(":", "", x, fixed = TRUE)
#[1] "Request(123) \n Element1: 123123 \n Element2: 456456"
## compare to gsub, match every colon
gsub(":", "", x, fixed = TRUE)
# [1] "Request(123) \n Element1 123123 \n Element2 456456"