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

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 14
Откуда: Кривий Ріг

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

Сообщение ymr3R9Jge » 24 июн 2014, 19:23

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

gamm
Гуру
Сообщения: 4057
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 24 июн 2014, 20:14

порежьте на части с помощью 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")

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 19 гостей