Извлечь номер телефона из текста в python

Я хочу извлечь номер телефона из текста. Я могу извлечь номер телефона из текста, когда все цифры представлены в одной строке. Но когда в следующей строке присутствуют некоторые цифры, регулярное выражение не работает.

Вот мой текст:

I will be out of the office. Please send me an email and text my mobile +45
20 32 40 08 if any urgency.

В приведенном выше тексте +45 находится в первой строке, а 20 32 40 08 - во второй строке. Я не могу извлечь телефонные номера из текста, когда текст похож на текст выше. Когда цифры присутствуют в одной строке, все работает нормально.

Вот мое регулярное выражение:

reg_phonestyle = re.compile(r'(\d{2}[-\/\.\ \s]??\d{2}[-\/\.\ \s]??\d{2}[-\/\.\ \s]??\d{2}[-\/\.\ \s]??\d{2}|\(\d{3}\)\s*\d{3}[-\/\.\ \s]??\d{4}|\d{3}[-\/\.\ \s]??\d{4})')

Может это поможет: stackoverflow.com/questions/159118/…

Andrew Scott 31.10.2018 12:50

Попробуйте сопоставить любое количество пробелов, символов ., - между цифрами и впоследствии удалить пробелы из совпадения. Попробуйте ideone.com/vTbqGp, см. демонстрация регулярного выражения. Кроме того, если это не дает желаемых результатов, попробуйте заменить [-\/\.\ \s]?? на (?:\s*|[-/.] (см. эта демонстрация).

Wiktor Stribiżew 31.10.2018 12:51

@ WiktorStribiżew, не работает

Anil Jagtap 31.10.2018 12:58

Он работает, и вы можете видеть это в моих многочисленных демонстрациях.

Wiktor Stribiżew 31.10.2018 13:05

@ WiktorStribiżew, он добавляет '\ n' в номера телефонов

Anil Jagtap 31.10.2018 13:08

... и re.sub(r'\s+', '', m.group()) его удаляет.

Wiktor Stribiżew 31.10.2018 13:09
1
6
937
2

Ответы 2

Вы можете указать дополнительный флаг для выполнения МНОЖЕСТВЕННОГО поиска. Учитывая ваш пример, я предлагаю следующее решение:

import re

input_str = '''                                                                 

I will be out of the office. Please send me an email and text my mobile +45     
20 32 40 08 if any urgency.                                                     

'''
phone_reg = re.compile("([0-9]{2,4}[-.\s]{,1}){5}", re.MULTILINE)

print(phone_reg.search(input_str).group(0))

Где это регулярное выражение найти 5 групп: от 2 до 4 цифр, за которыми следует 0 или 1 символ пробела

Надеюсь это поможет

Это мой способ получить номер телефона. на самом деле мне нужно больше примеров для проверки моего регулярного выражения.

import re
strs = '''                                                                 
I will be out of the office. Please send me an email and text my mobile +45     
20 32 40 08 if any urgency.                                                     
'''
phone = re.compile("(?<=mobile\s)(.?[0-9]|\s)+", re.S)

print( " ".join(phone.search(strs).group(0).split()) ) # remove \n and space and etc.

Другие вопросы по теме