Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 88

Вытащить регуляркой телефон из текста

22.11.2022, 10:54. Показов 1351. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь с помощью регулярного выражения вытащить телефонный номер из текстового поля и залить в отдельный столбец.
Дело происходит в датафрейме.

Python
1
df['phone'] = df['kommentarii'].map(lambda x: re.search(r"\d{10}", x))
Такое выражение дает ошибку / занесение в поле в виде <re.Match object; span=(0, 10), match='xxxxxxxxxx'>, где xxxxxxxxxx - искомый номер телефона.

Это самое близкое, что я смог получить.
Как написать команду, чтобы в поле был только номер телефона?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2022, 10:54
Ответы с готовыми решениями:

как вытащить регуляркой
как регуляркой вытащить 57d132b717d0b из строки '{&quot;status&quot;:&quot;ok&quot;,&quot;token&quot;:&quot;57d132b717d0b&quot;}'

Как регуляркой вытащить из строки все теги tr?
Здравствуйте, пишу парсер. Через cURL реализовал авторизацию, в ответ от сервера приходит большущая строка Сейчас использую php...

Парсинг текста регуляркой
Доброго времени суток. Есть тект &quot;paymentStatus&quot;:&quot;not-paid&quot;,&quot;leftDays&quot;:46,&quot;billDate&quot;:&quot;23.05.2017&quot;,&quot;billFor&quot;:&quot;Штраф по...

12
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.11.2022, 12:31
lambda x: re.search(r"\d{10}", x)[0]

Добавлено через 1 минуту
ну или феншуйно
lambda x: re.search(r"\d{10}", x).group()
1
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 88
22.11.2022, 12:41  [ТС]
iSmokeJC, к сожалению получаю такие ошибки, и не знаю, что с этим делать
Python
1
df['phone'] = df['kommentarii'].map(lambda x: re.search(r"\d{10}", x)[0])
'NoneType' object is not subscriptable

Python
1
df['phone'] = df['kommentarii'].map(lambda x: re.search(r"\d{10}", , x).group())
'NoneType' object has no attribute 'group'
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.11.2022, 12:54
Цитата Сообщение от Sibil Посмотреть сообщение
'NoneType' object has no attribute 'group'
Значит регулярка ничего не нашла

Добавлено через 27 секунд
Цитата Сообщение от Sibil Посмотреть сообщение
(r"\d{10}", , x)
это что?
0
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 88
22.11.2022, 13:03  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Значит регулярка ничего не нашла
Без .group() она находит, просто представляет это в таком виде: <re.Match object; span=(0, 10), match='xxxxxxxxxx'>.
xxxxxxxxxx - это номер телефона.
А я ищу способ, чтобы там был просто xxxxxxxxxx.

Цитата Сообщение от iSmokeJC Посмотреть сообщение
это что?
извиняюсь, при копировании добавилось
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.11.2022, 13:06
Цитата Сообщение от Sibil Посмотреть сообщение
Без .group() она находит
А group() вытаскивает из найденного собственно совпадение. Одно без другого не бывает.
Минимальный код в студию
0
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 88
22.11.2022, 15:45  [ТС]
iSmokeJC,
Python
1
2
3
import pandas as pd
data = {'kommentarii': ['9999999999,фамилия', '99999999991', '15гв', ''], 'phone': ['', '', '', '']} 
df = pd.DataFrame(data)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.11.2022, 15:50
Лучший ответ Сообщение было отмечено Sibil как решение

Решение

Вообще не понимаю, что ты пытаешься сделать вцелом
Python
1
2
3
4
5
6
7
import pandas as pd
import re
 
data = {'kommentarii': ['9999999999', 'фамилия', '99999999991', '15гв'], 'phone': ['', '', '', '']}
df = pd.DataFrame(data)
df['phone'] = df['kommentarii'].map(lambda x: re.search(r"\d{10}", x)[0] if re.search(r"\d{10}", x) else '')
print(df)
3
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 88
22.11.2022, 15:56  [ТС]
iSmokeJC, сэр, Вы великолепны!

Не задумался над else, а надо было!
1
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 88
25.11.2022, 12:00  [ТС]
iSmokeJC, а что нужно добавить после else, чтобы оставалось исходное значение столбца phone?
Получилось добавить только phone нулевой строки, но нужно, конечно, чтобы выводились значение 22 и 44. А сейчас выводится 11 в обоих случаях.

Python
1
2
3
4
5
6
7
import pandas as pd
import re
 
data = {'kommentarii': ['9999999999', 'фамилия', '99999999991', '15гв'], 'phone': ['11', '22', '33', '44']}
df = pd.DataFrame(data)
df['phone'] = df['kommentarii'].map(lambda x: re.search(r"\d{10}", x)[0] if re.search(r"\d{10}", x) else df['phone'][0])
df
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
25.11.2022, 12:13
Понятия не имею. Я не шарю в пандас
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
25.11.2022, 13:38
Sibil, Через "прокладку":
Python
1
2
3
4
5
6
7
8
9
import pandas as pd
import numpy as np 
 
data = {'kommentarii': ['9999999999', 'фамилия', '99999999991', '15гв'], 'phone': ['11', '22', '33', '44']}
df = pd.DataFrame(data)
df['tmp'] = df['kommentarii'].str.extract(r"(\d{10})")
df['phone'] = np.where(df['tmp'].values==df['tmp'].values, df['tmp'].values, df['phone'].values)
df.drop('tmp', axis=1, inplace=True)
print(df)
4
2 / 2 / 0
Регистрация: 23.09.2017
Сообщений: 88
15.12.2022, 09:32  [ТС]
Gdez, спасибо, как вариант)
У меня все же получилось задать else в lambda-функции, спасибо Red white socks
Python
1
2
3
df['phone'] = df[['kommentarii', 'phone']].apply(lambda x: re.search(r"\d{10}", x[0])[0] 
                                                 if re.search(r"\d{10}", x[0]) else x[1],
                                                 axis=1)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2022, 09:32
Помогаю со студенческими работами здесь

Замена текста с регуляркой
В статьях встречаются макросы вида: {} Где 37539 - id картинки из базы, нужно вытащить это id, и заменить весь макрос {} на строку - пути...

Очистка повторяющегося в произвольном количестве текста регуляркой
Всем привет! Подскажите пожалуйста, как сделать регуляркой следующую штуку (если это вообще возможно). Есть такой текст: Еще...

Захват текста регуляркой на разных итерациях цикла
Вопрос к знатокам - нижеприведенное выражение по стандарту работает всегда одинаково или в зависимости от реализации? Поясняю: первая...

Сохранение форматирования текста при обработке регуляркой
Возникла проблема, мне нужно сохранив форматирование текста удалить html теги. Я сохранил все форматирование...

Вырезать регуляркой кусок текста с разными условиями
Здравствуйте. Есть определенный кусок текста. Необходимо начиная с определенных слов (особенности репака, особенности repack и т.д.)...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru