Страница 1 из 1

Извлечение текста по шаблону

Добавлено: 24 июн 2014, 19:23
ymr3R9Jge
Доброе время суток! Возникла задача извлечь несколько повторяющихся частей из текстового вектора. Вектор:
[1] 1) 20140205, ИВАНОВ ИВАН ИВАНОВИЧ , т. 5763954 2) 20120409, ПЕТРОВ ПЕТР ПЕТРОВИЧ , т. 5868639333
[2] 2) 20120609, СТОЛЯРОВ СТОЛЯР СТОЛЯРОВИЧ, т. 6884839220854
Мне из него нужно извлечь только фамилии (сохранив их при этом в одной строке):
[1] ИВАНОВ ПЕТРОВ
[2] СТОЛЯРОВ
Но я не могу разобраться с регулярными выражениями. Если создавать шаблон, то нужно привязываться к тому, что в одной строке следуют несколько повторений. Шаблон выражения:
"([0-9]+\\) )([0-9]{8}, )([[:graph:]]+)"
- прекрасно распознаёт текст (с помощью gsub), но никак не получается извлечь части этого шаблона.

Re: Извлечение текста по шаблону

Добавлено: 24 июн 2014, 20:14
gamm
порежьте на части с помощью strsplit(), а потом извлекайте фамилии из частей. Повторений не будет. Напустите свой парсер на полученный список, а потом unlist() результату...

типа

Код: Выделить всё

cur_string<-"1) 20140205, ИВАНОВ ИВАН ИВАНОВИЧ , т. 5763954 2) 20120409, ПЕТРОВ ПЕТР ПЕТРОВИЧ , т. 5868639333"
cur_list<-strsplit(cur_string,"[0-9]*)[\x20]*")[[1]][-1]
cur_result<-unlist(lapply(cur_list,function(x) { tmp1<-unlist(strsplit(x,","))[2]; unlist(strsplit(tmp1,"[\x20]+"))[2] }))
cat(cur_result,"\n")