Как подставлять строку с номеров в паттерн Regex?
Не могу понять, как подставлять в паттерн @"+7 (\d\d\d) \d\d\d \d\d-\d\d" номер телефона 9883334422? Как правильно использовать Regex, чтобы это реализовать?
Ответы (2 шт):
Например, с помощью замены:
var s1 = "9883334422";
var s2 = Regex.Replace(s1, @"(\d{3})(\d{3})(\d\d)(\d\d)", "+7 ($1) $2 $3-$4");
Console.WriteLine(s2); // +7 (988) 333 44-22
Здесь $N используется для вставки N-й захваченной группы из входной строки
Т.к. правильный ответ уже дан, пофантазирую немного.
код сгенерирован автоматически на сайте regex101.com:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(?:\+?7|8)?[ (-]*(\d{3})[ )-]*(\d{3})[ -]*(\d{2})[ -]*(\d{2})";
string substitution = "+7 ($1) $2 $3-$4";
string input = @"918 177 77 47
89181777747
9181777747
8 918 177-77-47
+7(918)177 77 47
+79181777747
8(918)1777747
8-918-177-77-47
8(918)177-77-47
";
RegexOptions options = RegexOptions.Multiline;
Regex regex = new Regex(pattern, options);
string result = regex.Replace(input, substitution);
}
}
//result<<
/*
+7 (918) 177 77-47
+7 (918) 177 77-47
+7 (918) 177 77-47
+7 (918) 177 77-47
+7 (918) 177 77-47
+7 (918) 177 77-47
+7 (918) 177 77-47
+7 (918) 177 77-47
+7 (918) 177 77-47
*/
О регулярном выражении
^(?:\+?7|8)?[ (-]*(\d{3})[ )-]*(\d{3})[ -]*(\d{2})[ -]*(\d{2})"
^(?:\+?7|8)? - начало строки с необязательной незахватываемой группой в которой получаем +7 или 8
[ (-]* - ноль и более символов пробела тире и открывающихся скобок
(\d{3}) - три цифры захватываемые в первую группу, это код оператора
[ )-]* - ноль и более символов пробела тире и закрывающихся скобок
(\d{3}) - вторая группа, первые 3 цифры номера
[ -]* - ноль и более символов пробела и тире
(\d{2}) - треть группа, 4 и 5 символ номера
[ -]* - ноль и более символов пробела и тире
(\d{2}) - четвертая группа, 6 и 7 символ номера
Далее эти группы подставляем в необходимый шаблон, где $цифра соответствует номер захваченной группы:
string substitution = "+7 ($1) $2 $3-$4";