удаление левой скобки в str_split в r

Как я могу заставить это работать в R?

str_split("U.S. (California, San Luis Obispo County)",pattern=' (')

Ошибка в gregexpr("(", "США (Калифорния, округ Сан-Луис-Обиспо)", fixed = FALSE, : недопустимое регулярное выражение '(', причина 'Отсутствует')''

gregexpr("(", "U.S. (California, San Luis Obispo County)")

Ошибка в gregexpr("(", "США (Калифорния, округ Сан-Луис-Обиспо)") : недопустимое регулярное выражение '(', причина 'Отсутствует')''

gregexpr("(", "U.S. (California, San Luis Obispo County)",perl=T)

Ошибка в gregexpr("(", "США (Калифорния, округ Сан-Луис-Обиспо)", perl = T): недопустимое регулярное выражение '('

Кроме того, предупреждающее сообщение:

In gregexpr("(", "U.S. (California, San Luis Obispo County)", perl = T) :
  PCRE pattern compilation error
    'missing )'
    at ''

person yonicd    schedule 04.06.2014    source источник
comment
Проблема в том, что вы не избежали круглых скобок: pattern = "\\("? Круглые скобки в регулярных выражениях особенные.   -  person Hugh    schedule 04.06.2014
comment
Вы говорите о функции strsplit, когда пишете str_split в своем первом примере?   -  person jomuller    schedule 04.06.2014
comment
Не могли бы вы добавить вывод, ожидаемый в вашем вопросе, чтобы лучше понять, что вы хотите?   -  person jomuller    schedule 04.06.2014


Ответы (2)


Чтобы разделить с помощью специального символа, такого как "(", вы должны экранировать его. Чтобы избежать регулярного выражения в R, вы должны использовать двойной "\", один для строки символов R, а другой для регулярного выражения, как было предложено Хью. Тогда ваш шаблон должен быть "\(". См. regex doc для получения дополнительной информации.

Следующий код выполняет задание

raw_string <- "U.S. (California, San Luis Obispo County)"
splitted_string <- strsplit(x=raw_string, split="\\(")

splitted_string

#[[1]]
#[1] "U.S. "                              
#[2] "California, San Luis Obispo County)"

Но я не уверен, что ты этого хочешь. Если ваша цель — удалить левую скобку в строке символов, используйте gsub с пустым шаблоном замены.

raw_string <- "U.S. (California, San Luis Obispo County)"
no_parenthesis_string <- gsub(pattern="\\(", replacement="", x= raw_string)
no_parenthesis_string 
# [1] "U.S. California, San Luis Obispo County)"

Это помогает?

person jomuller    schedule 04.06.2014

gsub("\\\\(","",c("U.S. (California, San Luis Obispo County)"))

or

paste0(strsplit(c("U.S. (California, San Luis Obispo County)"), "\\(")[[1]], collapse = "")

Ответ: "Калифорния США, округ Сан-Луис-Обиспо)"

person 陳奕錩    schedule 12.11.2015