Регулярное выражение захватывает нежелательные числа из текстового файла - PullRequest
2 голосов
/ 18 мая 2019

Я очень плохо знаком с python и regex. Я пытаюсь извлечь номера телефонов из текстового файла, используя python.Числа могут быть в формате 0321-2695224 или 03212695224.

number_list = re.findall("03[0-6][0-9][-]?[0-9]{7}",numbers)

Это должно возвращать только числа с 11 цифрами, но это выражение также возвращает числа, которые имеют более 11 цифр.В моем файле есть номер 0344446568956565, и это выражение возвращает 03444465689. Я хочу, чтобы мое выражение полностью игнорировало числа, содержащие более 11 цифр.

1 Ответ

3 голосов
/ 18 мая 2019

Вы можете использовать это регулярное выражение, которое будет соответствовать только 11-значным числам, которые могут иметь дефис - между любыми из чисел,

(?<!\d)\d(?:-?\d){10}(?!\d)

Пояснение:

  • (?<!\d) - цифре не должна предшествовать цифра
  • \d - начинается сопоставление с цифрой
  • (?:-?\d){10} - Далее соответствует десяти цифрам, которые могут иметь дополнительный дефис перед цифрой
  • (?!\d) - за совпадающим номером не должна следовать цифра, чтобы избежать совпадения с большими числами, чем одиннадцать цифр

Regex Demo

код Python,

import re

s = 'sometext 0321-2695224 something else 03212695224 something else further 0344446568956565'
print(re.findall(r'(?<!\d)\d(?:-?\d){10}(?!\d)', s))

Печать только ваших предполагаемых номеров,

['0321-2695224', '03212695224']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...