Дан текст, в нём есть номер телефона, может быть как мобильный, так и "домашний", определенного формата нет, длина тоже может быть разной, например могут быть варианты:
xx-xx-xx
xxx-xxx
xxx-xx-xx
8(xxx)-xxx-xx-xx
8xxxxxxxxxx
И так далее
Возникает вопрос, как их достать, думаю пользоваться regex но прописать все варианты думаю если и возможно, то их очень много
EDIT 1
В тексте так же могут быть и другие цифры помимо номера, сейчас пока перебираю все возможные варианты записи номера для записи в regex.
Один из вариантов - удалить все тире и скобки и найти самую длинную цифру. Удалить не так сложно, сложнее найти самое длинное число в строке. Как это можно реализовать?
EDIT 2
Вот пример, в примере домашний номер телефона, однако может быть и мобильный, записанный в любом формате
Продолжается набор в группу "ПАРИКМАХЕР 3 разряда"!!!5 марта начинается курс обучения
Парикмахерские курсы включают в себя полную теоретическую и практическую подготовку, необходимую для трудоустройства и работы по специальности «парикмахер». Ученики парикмахерских курсов за короткое время научатся выполнять модные современные стрижки, освоят технологии завивки, укладки и окрашивания волос, смогут познакомиться с новейшими технологиями и тенденциями в области парикмахерского искусства..\nПредварительная запись Иваново, ул. Хакасская, 27\n34-40-80
EDIT 3
Указал я не все варианты, так же может использоваться +7, в скобках может быть 3, а не 4 цифры. То есть вариантов может быть огромное количество, и я пытаюсь подобрать универсальный вариант для всех. Как вариант можно сделать так
string s = "Парикмахерские курсы включают в себя полную теоретическую и практическую подготовку, необходимую для трудоустройства и работы по специальности «парикмахер». Ученики парикмахерских курсов за короткое время научатся выполнять модные современные стрижки, освоят технологии завивки, укладки и окрашивания волос, смогут познакомиться с новейшими технологиями и тенденциями в области парикмахерского искусства..\nПредварительная запись Иваново, ул. Хакасская, 27 34-40-80"
s.Replace("-", String.Empty);
s.Replace("(", String.Empty);
s.Replace(")", String.Empty);
Тогда получится в тексте будет номер без лишних знаков, минимальная длинна 4 символа, как его найти?
приведенные вами форматы телефона
string input = "tel 1 11-22-33 tel 2 444-555 tel 3 666-77-88 55 8(999)-111-22-33 55 81234567891";
string pattern = "[+()0-9-]{5,20}";
var matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
Console.WriteLine(match.Value);
Console.WriteLine();
Вывод:
11-22-33
444-555
666-77-88
8(999)-111-22-33
81234567891
При этом шаблоне var pattern = @"\b(\d.?){6,}\b";
У меня получился вывод:
1 11-22-33
2 444-555
3 666-77-88
55 8(999
111-22-33 55
81234567891
Просто удалите все не-цифры из строки:
string source = "123(3312)+312";
string number = new string(source.ToCharArray().Where(Char.IsDigit).ToArray());
В приведенных вами вариантах номеров телефонов между цифрами может находиться один нецифровой символ (скобки или тире). В тексте могут быть и другие числа, поэтому вам нужно найти длинное: я ввел лимит в 6 цифр.
var input = "Вася, 25 лет, 8(555)555555, образование 3 класса, желаемая зарплата 300 тыщ";
var pattern = @"\b(\d.?){6,}\b";
var matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
Console.WriteLine(match.Value);
Вывод:
8(555)555555
Возможно, проверять границы слова не нужно, тогда можно убрать \b
.
В шаблоне @"(\d.?){6,}"
из-за наличия точки .
ловится любой символ между цифрами. Можно улучшить вероятность нахождения нужной информации, использовав набор нужных символов:
@"(\d[()-]?){6,}"
или, если в номере телефона могут идти более одного нецифрового символа подряд, например, 8(999)-111-22-33
, тогда:
@"(\d[()-]{0,2}){6,}"
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я только только начал изучать C# с ASPnet фреймворк
Wrong output for "1234\n" Expected: False But was: True
У меня есть JObjectПосле выборки не могу преобразовать в JToken
Не могу разобраться, как все таки правильно, с контроллера передавать данные из БД в класс или все таки в классе получать доступ к БД? Например:...