#r #gsub
#r #gsub
Вопрос:
У меня есть этот текст.
raw <- "this is Mapof ttMapof qwqqwMApofRt Mapofssdsd it"
Я хочу, чтобы результат был следующим:
"this is Mapof (Map of) ttMapof (Map of) qwqqwMapofRt Mapof (Map of)ssdsd it"
Итак, вы видите, что я хочу заменить каждый «Mapof» на «Mapof (Map of)», но не тот, что в «qwqqwMapofRt».
Как мне это сделать?
Комментарии:
1. Предыдущий пример был слишком сложным. Отредактировал его и теперь добавил простой.
2. Откуда такое неожиданное поведение?
sub
заменяет первое совпадениеpattern
сreplacement
, что именно то, что он делает. То, что вы хотите, может быть легко достигнуто сgsub
помощью :gsub('Mapof', 'Mapof (Mapof)', raw)
.3. @JoshuaUlrich но в случае, если «Mapof» происходит между ними, как в «qwertMapoferer». gsub также заменит это. Я не хочу заменять ‘Mapof’ в таких случаях. Как мне это сделать? Итак, в принципе, я хотел бы, чтобы какая-нибудь функция заменяла точный шаблон, включая пробелы, такие как ‘Mapof’, ‘Mapof’, ‘Mapof’.
4. Изменение моего вопроса в соответствии с вводными данными, предоставленными Джошем. Спасибо, Джош!
Ответ №1:
Вам нужно указать, что «Mapof» должно заканчиваться словом с использованием b
:
> raw <- "this is Mapof ttMapof qwqqwMapofRt it"
> gsub("Mapof\b", "Mapof (Map of)", raw)
[1] "this is Mapof (Map of) ttMapof (Map of) qwqqwMapofRt it"
От ?regex
:
Символ b соответствует пустой строке на любом краю слова
Редактировать: если вы хотите, чтобы строка соответствовала либо концу слова, либо началу слова, тогда регулярное выражение становится:
> raw <- "this is Mapof ttMapof qwqqwMapofRt Mapofssdsd it"
> gsub("Mapof\b|\bMapof", "Mapof (Map of)", raw)
[1] "this is Mapof (Map of) ttMapof (Map of) qwqqwMapofRt Mapof (Map of)ssdsd it"
Mapof\b
означает, что строка должна соответствовать концу слова, \bMapof
что она должна соответствовать началу. Оба разделены |
значением OR
.
Комментарии:
1. Что делать, если строка является необработанной <- «это Mapof ttMapof qwqqwMapofRt Mapofssdsd it» ? Можете ли вы изменить свое решение для этой строки? Вывод должен быть «»это Mapof (Карта) ttMapof (Карта) qwqqwMapofRt Mapof (карта) ssdsd it» Я не очень хорошо знаком с регулярными выражениями. Я пробовал манипулировать им, но безуспешно!
2. Подойдет, но, возможно, вы хотите изменить свой вопрос, потому что то, что вы хотите, очень неясно в теле вашего вопроса.