У вас есть идея удалить с определенной точки (например, через 3. пробел) до конца текста в r?

#r #regex #gsub

#r #регулярное выражение #gsub

Вопрос:

Для "for delete 3. space until end of sentence." строки я пытаюсь получить for delete 3. в результате с

 clear_brand_name <- gsub("^\s[3]", "", brand_name)
  

Это не дает ожидаемого результата.

Комментарии:

1. sub("\s*3\..*", "", brand_name) ? Или sub("(\s*3\.).*", "\1", brand_name) ?

2. Это не сработало в «ASUS C302CA-DHM4 Chromebook Flip с 12,5-дюймовым сенсорным экраном, конвертируемый Chromebook, Intel Core m3, 4 ГБ оперативной памяти, 64 ГБ флэш-памяти, цельнометаллический корпус, USB Type C, Corning Gorilla Glass, Chrome OS»

3. Вам нужно 1) regex101.com/r/Nb9zD9/1 или 2) regex101.com/r/Nb9zD9/2 ? Каков ожидаемый результат для "ASUS C302CA-DHM4 Chromebook Flip 12.5-inch Touchscreen Convertible Chromebook, Intel Core m3, 4GB RAM, 64GB Flash Storage, All-Metal Body, USB Type C, Corning Gorilla Glass, Chrome OS" ?

4. ожидаемый результат: ASUS C302CA-DHM4 Chromebook

5. Затем вы просто хотите извлечь первые три слова, sub("^\s*(\S (?:\s \S ){2}).*", "\1", brand_name) ?

Ответ №1:

Вы можете использовать

 clear_brand_name <- sub("^\s*(\S (?:\s \S ){2}).*", "\1", brand_name)
  

Смотрите демонстрацию регулярных выражений. sub найдет и заменит первое вхождение, которое соответствует шаблону.

Детали шаблона

  • ^ — начало строки
  • \s* — 0 пробелов
  • (\S (?:\s \S ){2}) — Группа 1:
    • \S — 1 символы без пробелов
    • (?:\s \S ){2} — два повторения 1 пробелов, а затем 1 символов, не содержащих пробелов
  • .* — остальную часть строки.

Полное совпадение (вся строка) заменяется значением из группы 1 из-за 1 .