#r #regex #gsub
#r #регулярное выражение #gsub
Вопрос:
У меня есть следующие данные, и я хочу заменить только отдельные символы.
A,Apple
A
Я хочу создать вывод таким образом, чтобы
Banana,Apple
Banana
Другими словами, я хочу заменить все, что имеет A, или просто A на banana. Но если появляется другое слово, начинающееся с A, я хочу это проигнорировать.
Я пытался
gsub("A", "Banana"),
gsub("A[^,;]","Banana"),
Но это не сработает для первого примера, результат, который я получаю,
Banana,Bpple
Есть идеи о том, как я могу этого добиться?
Спасибо!
Комментарии:
1. Вам нужен квантификатор. Шаблон
"A.*"
будет соответствовать символу anA
, за которым следует 0 или более символов любого типа. Если вы хотите установить ограничения, просто замените.
на[^,;]
или что-нибудь2. Если я не неправильно понимаю ваш вопрос. Можете ли вы привести воспроизводимый пример, который прояснит, каков ваш желаемый результат?
3.
sub("^A($|,)", "Apple\1", x)
?
Ответ №1:
Если значение всегда окружено знаком препинания или началом / концом строки:
text = "A,ApplenAnAvocado"
text2 = gsub("(\b)A(\b)", "\1Bananna\2", text, TRUE, TRUE)
cat(text2)
Это фиксирует знаки препинания, если таковые существуют, вокруг «A», а затем возвращает их обратно, используя обратные 1
ссылки и 2
. Используются PCRE, чтобы мы могли использовать b
совпадение границ слов.
Вывод:
Bananna,Apple
Bananna
Avocado
Комментарии:
1. Спасибо всем за разнообразие подходов!
Ответ №2:
Решением без регулярных выражений может быть разделение строки на comma ( ,
), изменение значения на «Banana», если оно равно «A»
sapply(strsplit(x, ","), function(x) toString(ifelse(x == "A","banana", x)))
#[1] "banana, Apple" "banana"
данные
x <- c("A,Apple", "A")