替换R中字符串中字符的首次出现

时间:2019-07-16 19:51:43

标签: r string gsub

我正在处理许多字符串。我意识到我可以使用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"上使用问号,但我无法使其正常工作。

1 个答案:

答案 0 :(得分:2)

g中的gsub代表 global ,表示它将与所有匹配项匹配。如果您使用sub而不是gsub,则只会匹配并替换第一个匹配项。有关详细信息,请参见?gsub,位于说明

  

subgsub分别替换第一个和所有匹配项。

并且,如果您只想替换冒号,则您的模式应该仅为":"".*:"将匹配并替换最后一个冒号中的所有内容。如果要替换第一个冒号之前的所有内容,则可以使用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"