REGEXP помогите, голова плавится

Xagler

Новичок
Пользователь
Май 13, 2020
13
3
3
Добрый день.
Имеется кортеж:
Python:
['Музыкальныйпродюсер', '', '', '', '',
 'GunnarReiss-andersensgate174,3259Larvik,Норвегия', '', '',
 '3357+HJЛарвик,LarvikMunicipality,Норвегия', '', '',
 '+4791739260', '', '', 'Явладелецкомпании', '', '',
 'Добавитьчасыработы', '', '', 'Добавитьсайт']

С помощью регулярок необходимо вытащить номер телефона +4791739260
Но у меня ничего не получается, вот мой код:
Python:
        for ph in phone:
            string.append(ph.text.replace(' ','')) # убираю пробелы в строках
        res = re.findall('(\d{8,16})',string) # ищу совпадения
        for r in res: #пытаюсь вывести результат
            print(r) # но результата нет, хотя string - кортеж выше
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Python:
import re
lst = [
    'Музыкальныйпродюсер', '', '', '', '',
    'GunnarReiss-andersensgate174,3259Larvik,Норвегия', '', '',
    '3357+HJЛарвик,LarvikMunicipality,Норвегия', '', '',
    '+4791739260', '', '', 'Явладелецкомпании', '', '',
    'Добавитьчасыработы', '', '', 'Добавитьсайт'
]
phones = []
rx = re.compile(r"\+\d{10}\b")
for e in lst:
    m = rx.match(e)
    if m is not None:
        phones.append(m.group())
print(phones)
>>> ['+4791739260']
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
С помощью регулярок необходимо вытащить номер телефона +4791739260
А зачем в данном случае регулярки. Можно просто на условиях сделать:
Python:
x = ['Музыкальныйпродюсер', '', '', '', '',
 'GunnarReiss-andersensgate174,3259Larvik,Норвегия', '', '',
 '3357+HJЛарвик,LarvikMunicipality,Норвегия', '', '',
 '+4791739260', '+4791739е60', '', 'Явладелецкомпании', '', '',
 'Добавитьчасыработы', '+351234456', '', 'Добавитьсайт', '+35353535535', '+353fff44664']

for i in x:
    # проверяем что строка начинается с '+', содержит только цифры и
    # ее длина равна 11 символам
    if i.startswith('+') and all([j.isdigit() for j in i[1:]]) and len(i) == 11:
        print(i)
 
  • Мне нравится
Реакции: Vlad_SD

Xagler

Новичок
Пользователь
Май 13, 2020
13
3
3
А зачем в данном случае регулярки. Можно просто на условиях сделать:
Python:
x = ['Музыкальныйпродюсер', '', '', '', '',
'GunnarReiss-andersensgate174,3259Larvik,Норвегия', '', '',
'3357+HJЛарвик,LarvikMunicipality,Норвегия', '', '',
'+4791739260', '+4791739е60', '', 'Явладелецкомпании', '', '',
'Добавитьчасыработы', '+351234456', '', 'Добавитьсайт', '+35353535535', '+353fff44664']

for i in x:
    # проверяем что строка начинается с '+', содержит только цифры и
    # ее длина равна 11 символам
    if i.startswith('+') and all([j.isdigit() for j in i[1:]]) and len(i) == 11:
        print(i)
потому что вышеупомянутый кортеж не всегда такой, было бы очень просто, если бы всегда 12й элемент требовался бы))
 

Xagler

Новичок
Пользователь
Май 13, 2020
13
3
3
Проблема решилась правильной конструкцией условия и регулярки:
Код:
        for r in string:
            res = re.findall(r'^\+[0-9]+',r)
            if res:
                return res[0]
 
  • Мне нравится
Реакции: Vlad_SD

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
потому что вышеупомянутый кортеж не всегда такой, было бы очень просто, если бы всегда 12й элемент требовался бы))
Вы видимо просто не поняли код из моего примера. Он подойдет для любого кортежа или списка. Условие в коде просто выберет все элементы, которые начинаются с символа '+', имеют длину 11 символов и кроме первого символа состоят из цифр.
 

Форум IT Специалистов