С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 12.05.2019
Сообщений: 26

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

07.07.2022, 22:17. Показов 2276. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Иногда при знакомстве мы записываем контакты в адресную книгу кое-как с мыслью, что "когда-нибудь потом все обязательно поправим". Копируем данные из интернета или из смски. Добавляем людей в разных мессенджерах. В результате получается адресная книга, в которой совершенно невозможно кого-то нормально найти: мешает множество дублей и разная запись одних и тех же имен.

Ваша задача: починить адресную книгу, используя регулярные выражения.
Структура данных будет всегда:
lastname,firstname,surname,organization, position,phone,email
Предполагается, что телефон и e-mail у человека может быть только один.
Необходимо:

поместить Фамилию, Имя и Отчество человека в поля lastname, firstname и surname соответственно. В записной книжке изначально может быть Ф + ИО, ФИО, а может быть сразу правильно: Ф+И+О;
привести все телефоны в формат +7(999)999-99-99. Если есть добавочный номер, формат будет такой: +7(999)999-99-99 доб.9999;
объединить все дублирующиеся записи о человеке в одну.

Вот csv файл

lastname,firstname,surname,organization, position,phone,email
Усольцев Олег Валентинович,,,ФНС,главный специалист – эксперт отдела взаимодействия с федеральными органами власти Управления налогообложения имущества и доходов физических лиц,+7 (495) 913-04-78,opendata@nalog.ru
Мартиняхин Виталий Геннадьевич,,,ФНС,,+74959130037,
Наркаев,Вячеслав Рифхатович,,ФНС,,8 495-913-0168,
Мартиняхин,Виталий,Геннадьевич,ФНС,cовет ник отдела Интернет проектов Управления информационных технологий,,,
Лукина Ольга Владимировна,,,Минфин,,+7 (495) 983-36-99 доб. 2926,Olga.Lukina@minfin.ru
Паньшин Алексей Владимирович,,,Минфин,,8(495)748-49-73,1248@minfin.ru
Лагунцов Иван Алексеевич,,,Минфин,,+7 (495) 913-11-11 (доб. 0792),
Лагунцов Иван,,,,,,Ivan.Laguntcov@minfin.ru

Вот мой код:

```
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[CODE]
from re import sub
from application.working_file import reading_csv_file, writing_csv_file
 
contacts_list = reading_csv_file()
 
num_pattern = r'(\+7|8)(\s*)(\(*)(\d{3})(\)*)(\s*)' \
                  r'(\-*)(\d{3})(\s*)(\-*)(\d{2})(\s*)(\-*)' \
                  r'(\d{2})(\s*)(\(*)(доб)*(\.*)(\s*)(\d+)*(\)*)'
    
num_pattern_new = r'+7(\4)\8-\11-\14\15\17\18\20'
contacts_list_new = list()
for page in contacts_list:
  page_string = ','.join(page) # объединение в строку
  format_page = sub(num_pattern, num_pattern_new, page_string) # замена шаблонов в строке
  page_list = format_page.split(',') # формируем список строк
  contacts_list_new.append(page_list)
 
 
name_pattern = r'^(\w+)(\s*)(\,?)(\w+)' \
                   r'(\s*)(\,?)(\w*)(\,?)(\,?)(\,?)'
name_pattern_new = r'\1\3\10\4\6\9\7\8'
contacts_list = list() # создаем список
for page in contacts_list_new:
  page_string = ','.join(page) # объединение в строку
  format_page = sub(name_pattern, name_pattern_new, page_string)
  page_list = format_page.split(',') # формируем список строк
  contacts_list.append(page_list)
 
    
# убираем дубликаты
for i in contacts_list:
  for j in contacts_list:
    if i[0] == j[0] and i[1] == j[1] and i is not j:
      if i[2] is '':
        i[2] = j[2]
      if i[3] is '':
        i[3] = j[3]
      if i[4] is '':
        i[4] = j[4]
      if i[5] is '':
        i[5] = j[5]
      if i[6] is '':
        i[6] = j[6]
    contact_list = list()
    for page in contacts_list:
      if page not in contact_list:
        contact_list.append(page)
 
#print(contact_list)
writing_csv_file(contact_list)
[/CODE]
```

В результате получаю список в котором остаются 2 дубля помогите разобраться в ошибке :

[['lastname', 'firstname', 'surname', 'organization', 'position', 'phone', 'email'], ['Усольцев', 'Олег', 'Валентинович', 'ФНС', 'главный специалист – эксперт отдела взаимодействия с федеральными органами власти Управления налогообложения имущества и доходов физических лиц', '+7(495)913-04-78', 'opendata@nalog.ru'], ['Мартиняхин', 'Виталий', 'Геннадьевич', 'ФНС', 'cоветник отдела Интернет проектов Управления информационных технологий', '+7(495)913-00-37', ''], ['Наркаев', 'Вячеслав', 'Рифхатович', 'ФНС', '', '+7(495)913-01-68', ''], ['Мартиняхин', 'Виталий', 'Геннадьевич', 'ФНС', 'cоветник отдела Интернет проектов Управления информационных технологий', '+7(495)913-00-37', '', ''], ['Лукина', 'Ольга', 'Владимировна', 'Минфин', '', '+7(495)983-36-99 доб.2926', 'Olga.Lukina@minfin.ru'], ['Паньшин', 'Алексей', 'Владимирович', 'Минфин', '', '+7(495)748-49-73', '1248@minfin.ru'], ['Лагунцов', 'Иван', 'Алексеевич', 'Минфин', '',
'+7(495)913-11-11 доб.0792', 'Ivan.Laguntcov@minfin.ru']]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.07.2022, 22:17
Ответы с готовыми решениями:

Как починить адресную светодиодную ленту?
После сгибания ленты, она перестала работать до определенного светодиода. Питание есть, у меня остаются вопросы только по третьему,...

Используя регулярные выражения
Используя регулярные выражения. Дана строка. Выяснить, верно ли, что в данной строке больше групп букв, чем групп цифр.

Используя регулярные выражения
Используя регулярные выражения, для каждого из слов, которые вводятся в текстовые поля HTML-документа, определить, сколько раз они...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.07.2022, 22:17
Помогаю со студенческими работами здесь

Регулярные выражения, используя regexec
Добрый день! Нужна помощь. Есть задача для получения всех подстрок, заключенных внутри <...>, строки через регулярное выражение. ...

Удаление используя регулярные выражения
Как с помощью регулярок удалить из строки всё, что идёт после ключевого слова? Допустим, строка "The quick fox jumps over the lazy...

Распарсить страницу, используя регулярные выражения
Здравствуйте. Вопрос такой: в программу приходит ответ от сайта: <img width="12" height="12"...

Разделить строку используя регулярные выражения
Всем привет. Помогите с таким вопросом. Имеется предложение Мама, ax ax,, мыла раму 25/05/2015 ух;25раз!!! Потом 26/05/2015...

Возможно ли реализовать, используя регулярные выражения?
Дано 2 строки одинаковой длины. Проверить условие: 1) Первая и последняя буквы 1 и 2 строки совпадают. 2) Если поменять местами...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru