#r #regex #whitespace #gsub #space
#r #регулярное выражение #пробелы #gsub #Космос
Вопрос:
У меня есть почти 100 000 строк очищенных данных, которые я преобразовал в фреймы данных. Один столбец представляет собой строку текстовых символов, но работает странно. В приведенном ниже примере есть текст, заключенный в квадратные скобки, информацию, которую я хочу удалить, и я также хочу удалить «(c)». Однако пробел впереди технически не является пробелом (считается ли он пробелом?).
Я не уверен, как воспроизвести пример здесь, потому что, когда я копирую / вставляю запись, она обрабатывается как обычная и работает, но в очищенных данных это не так. Проверка кишки заключалась в подсчете пробелов, и она дала мне 4, что означает, что пробел перед ( не является истинным пробелом. Я не знаю, как это удалить!
Мой код, который я обычно запускаю, выглядит следующим образом. Опять же, работает таким образом, но не работает в моих очищенных данных.
test<-c("Barry Windham (c) amp; Mike Rotundo (c)")
test<-gsub("[ ][(]c[)]","",test)
Комментарии:
1. Работает ли это
"\s\(c\)"
?2. Итак, каков ожидаемый результат?
Barry Windham(c) amp; Mike Rotundo(c)
илиBarry Windham amp; Mike Rotundo
?
Ответ №1:
Вы можете рассмотреть возможность использования:
test<-c("Barry Windham (c) amp; Mike Rotundo (c)")
gsub("(*UCP)\s \(c\)", "", test, perl=TRUE)
# => [1] "Barry Windham amp; Mike Rotundo"
Смотрите онлайн-демонстрацию R
Подробные сведения
(*UCP)
— поддерживает все классы сокращенных символов в регулярном выражении PCRE (это PCRE из-заperl=TRUE
) Unicode\s
— любые один или несколько пробелов в Юникоде\(c\)
—(c)
подстрока.
Если вам нужно сохранить (c)
, запишите его и используйте обратную ссылку при замене:
gsub("(*UCP)\s (\(c\))", "\1", test, perl=TRUE)
Комментарии:
1. Это выглядит хорошо, спасибо! Он избавился от пробела впереди, и как бы мне настроить его, чтобы также избавиться от (c) вместе с ним?
2.@KevS
gsub("(*UCP)\s \(c\)", "", test, perl=TRUE)
удаляет пробелы и.(c)
3. Это сделало это, большое вам спасибо! Извините, если я пропустил часть деталей, и вы уже ответили на мои последующие действия. Еще раз спасибо