2015-07-16 6 views
1

Как все экземпляры символа удаляются из строки , за исключением первого совпадения с использованием регулярного выражения? В приведенных ниже примерах я хотел бы сохранить первый «-» и удалить все остальные экземпляры.Удалить символ из строки, игнорируя первое совпадение с использованием regex

myvec <- c("12-34-5678-9", "ABC-DEF-GHI-JKL-MN", "9-8765", "a - defgh -- ijkl") 

Результат запрошенной:

"12-3456789" "ABC-DEFGHIJKLMN" "9-8765" "a - defgh ijkl" 

Я разработал решение с использованием strsplit и перестроен векторами с помощью paste но я ищу для регулярного выражения подхода, чтобы удовлетворить мое любопытство.

ответ

2

Вы можете использовать группу захвата.

> myvec <- c("12-34-5678-9", "ABC-DEF-GHI-JKL-MN", "9-8765", "a - defgh -- ijkl") 
> gsub("^([^-]*-)|-", "\\1", myvec) 
[1] "12-3456789"  "ABC-DEFGHIJKLMN" "9-8765"   
[4] "a - defgh ijkl" 
2

Попробуйте

gsub('^[^-]+-(*SKIP)(*F)|-', '', myvec, perl=TRUE) 
#[1] "12-3456789"  "ABC-DEFGHIJKLMN" "9-8765"   "a - defgh ijkl" 
Смежные вопросы