Мне известно о множественном ответе, показывающем , как соответствует нескольким вхождениям в одной строке.Однако я пока не смог найти ответ, который бы предоставил контекст для , почему не работает следующее:
## A string for which I want to replace `red` and `Red` with `RED`
x <- c("redflag flagred red and Red")
## This one works using `gsub()`
gsub("\\b(?:red|Red)\\b", "RED", x)
#[1] "redflag flagred RED and RED"
Но есть ли способ использовать sub()
вместо?Следующее не работает.Он соответствует только первому вхождению и затем останавливается:
sub("\\b(?:red|Red)\\b", "RED", x)
#[1] "redflag flagred RED and Red"
При проверке фактического шаблона он должен совпадать: https://regex101.com/r/X7DSB0/1 Я предполагаю, что это как-то связано с "глобальным флагом"?
Я также пытался добавить +
или {1,}
, чтобы получить несколько совпадений, но это тоже не работает:
## using a `+` doesn't work either
sub("\\b(?:red|Red)+\\b", "RED", x)
#[1] "redflag flagred RED and Red"
## using `{1,}` doesn't work either
sub("\\b(?:red|Red){1,}\\b", "RED", x)
#[1] "redflag flagred RED and Red"
Что я не понимаю?Как я мог использовать sub()
вместо gsub()
для такой операции?