Доброе время суток! Возникла задача извлечь несколько повторяющихся частей из текстового вектора. Вектор:
[1] 1) 20140205, ИВАНОВ ИВАН ИВАНОВИЧ , т. 5763954 2) 20120409, ПЕТРОВ ПЕТР ПЕТРОВИЧ , т. 5868639333
[2] 2) 20120609, СТОЛЯРОВ СТОЛЯР СТОЛЯРОВИЧ, т. 6884839220854
Мне из него нужно извлечь только фамилии (сохранив их при этом в одной строке):
[1] ИВАНОВ ПЕТРОВ
[2] СТОЛЯРОВ
Но я не могу разобраться с регулярными выражениями. Если создавать шаблон, то нужно привязываться к тому, что в одной строке следуют несколько повторений. Шаблон выражения:
"([0-9]+\\) )([0-9]{8}, )([[:graph:]]+)"
- прекрасно распознаёт текст (с помощью gsub), но никак не получается извлечь части этого шаблона.
Извлечение текста по шаблону
-
- Активный участник
- Сообщения: 117
- Зарегистрирован: 31 окт 2011, 00:18
- Репутация: 14
- Откуда: Кривий Ріг
-
- Гуру
- Сообщения: 4057
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Извлечение текста по шаблону
порежьте на части с помощью 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")
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 19 гостей