2016-06-03 3 views
0

В DF У меня есть столбец запись различной длины, как:содержания подстроки в кавычках

tmp_ezg.\"dr_HE_10691\", tmp_ezg.\"dr_MV_0110200016\", tmp_ezg.\"dr_MV_0111290017\" и т.д.

Как лучше подстроки, что в заключенных в кавычках?

Моя идея:

substring(DF$name, 10) 

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

Есть ли возможность подстроки только между определенными символами (т. Е. Кавычками)?

+0

Эта проблема сложна в обращении с использованием регулярного выражения, поскольку вы можете не знать, сколько котировочных пар вам нужно захватить. Это действительно работа для парсера. –

+0

Можно ли избежать кавычек внутри цитируемых подстрок? Есть ли только одна цитированная подстрока на строку? –

+0

@Wiktor Stribizew: Нет никаких скрытых цитат внутри указанной подстроки и да, конечно, только одна строка. – andrasz

ответ

2

Например

x <- c('tmp_ezg.\"dr_HE_10691\"' , 
     'tmp_ezg.\"dr_MV_0110200016\"' , 
     'tmp_ezg.\"dr_MV_0111290017\"') 
res <- sub('.*?"([^"]+)"', "\\1", x) 
print(res, quote=F) 
# [1] dr_HE_10691  
# [2] dr_MV_0110200016 
# [3] dr_MV_0111290017 

... если я не ошибаюсь.

+0

Можете ли вы объяснить это регулярное выражение, пожалуйста? – sebastianmm

+1

Несомненно. Совпадение любых символов до первого «, захвата любых символов» в \ 1 до следующего ». – lukeA

+0

Спасибо.' '' Не нужно. Что означает '\\ 1'? – andrasz

2

Чтобы отделить содержимое между кавычками (в предположении, имеется ровно два в каждой записи), вы просто разделить строку на \\\" (убежали обратной косой черты и кавычки):

y <- strsplit(x, split = "\\\"") 

Если все записи заканчиваются кавычек, это даст вам список записей с двумя значениями, а второе значение в каждой записи - ваша строка.

[[1]] 
[1] "tmp_ezg."   "dr_HE_10691" 
[[2]] 
[1] "tmp_ezg."   "dr_MV_0110200016" 
[[3]] 
[1] "tmp_ezg."   "dr_MV_0111290017" 
+0

Спасибо за вход strsplit(). Ответ @lukeA работает более красиво, хотя – andrasz

Смежные вопросы