2016-12-29 3 views
0

Я новичок в регулярных выражениях и пытаюсь заменить целые слова на основе первых двух символов строки. Например, если у меня есть фрейм данных, называемый автомобилями, и переменная называется машинами, я бы хотел заменить Honda на японский. Я могу заставить его заменить первые два символа, но не все слово. Основываясь на том, что я читаю здесь, вот что я придумал, но он не работает. Что я делаю не так?regex - заменить слово на основе первых двух символов - R

automobiles$cars <- gsub(ignore.case=TRUE, "\\<^ho\\>", paste("ho", "Japanese"), automobiles$cars) 
+1

Не могли бы вы использовать 'dput (cars $ cars)', чтобы показать нам, как выглядят данные? – G5W

ответ

2

Это, как вы замените все строки, начинающиеся с «Хо» с «японский:

> cars <- c("Honda", "Audi", "Ford") 

> cars 
[1] "Honda" "Audi" "Ford" 

> cars <- gsub("^Ho(.*)", "Japanese", cars, ignore.case = TRUE) 

> cars 
[1] "Japanese" "Audi"  "Ford" 

Ваш код содержит некоторые очень странные вещи, так что я подозреваю, что ваши данные/вопрос может быть более сложным, чем это. объясните, пожалуйста, в дальнейшем, если это так.

Загвоздка ^Ho(.*), который выбирает полную строку ((.*) для «все, что следует»), если начинается строка (^) с "Ho ".

+0

это работает, спасибо @Fr.! Как я уже сказал, я новичок в регулярных выражениях и был типичным, чтобы объединить решение, основанное на том, что я читал здесь, и других онлайн-ресурсах. Я полагаю, что (. *) Означает замену всего слова, а не только первых двух символов? Еще раз спасибо. – DCRubyHound

+0

Да, '(*)' часть шаблона в основном «ест» всю строку. Из вашего кода я был не уверен точно, что вы хотели. Я считаю, что вы, возможно, не понимаете 'paste' правильно, например: он предназначен для конкатенации строк, поэтому ваш код заменит ваши строки' 'ho Japanese' (см.'? Paste'). Кроме того, если вы новичок в regex в R, я рекомендую использовать пакет 'stringr'. –