Замена одиночных символов или символов, разделенных запятой

#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.*" будет соответствовать символу an A , за которым следует 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")