# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"((\+?\d{1,3}[\d{2,}\.\- \(\)]{11,}))|(\+?[\d]{10,})"
test_str = ("Приветствую!\n"
"Можете помочь составить регулярное выражение чтобы вырезать номера телефонов из текста?\n"
"Для чего это нужно?\n"
"Для вырезки из текста +22 (999) 555-66-29 формы сообщения - телефонов спамеров.\n\n"
"Вариантов написания телефонов достаточно много.\n"
"Как учесть все варианты я не понимаю.\n"
"Телефоны имеют разное количество цифр: 10, 11, 12.\n"
"Разное написание:\n"
"+7 999 999 99 99\n"
"7 999 999 99 99\n"
"+7999 999 99 99\n"
"7999 999 99 99\n"
"+7999-999-99-99\n"
"7999-999-99-99\n"
"+7999-999-9999\n"
"7999-999-9999\n"
"+7999-9999999\n"
"7999-9999999\n"
"+79999999999\n"
"79999999999\n"
"+7.999.999.99.99\n"
"+7(999) 999-99-99\n"
"+123 (999) 555-66-29\n"
"и вместо цифры страны с оной цифрой 7, есть коды по 2 и по 3 цифры.\n"
"Можно придумать и ещё много вариантов написания номера телефона.\n"
"Как это всё учесть в выражении?\n"
"В тексте могут содержаться ссылки +555 (999) 555-66-29 на фотографии и ссылки на страницы сайта, в которых могут быть цифры. Как не зацепить цифры в ссылках? Как их отсортировать от номеров телефонов?\n"
"Можете помочь?")
subst = "убито "
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
print (result)
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html