Regex Select & Replace для очистки номеров телефонов в США - PullRequest
0 голосов
/ 17 октября 2018

Мы получаем список телефонных номеров как часть потока данных.Они все для компаний в Северной Америке.Я хотел бы удалить любые начальные "1" или "+1" и любую конечную информацию, такую ​​как "x100", "EXT400" и т. Д. Они хранятся в MariaDB, поэтому я хотел бы сделать

UPDATE `CompanyPhone` SET `number`= REGEXP_SUBSTR(`number`,pattern)

Чтобы удалить ненужные вещи, мне просто нужно REGEX, чтобы выбрать правильную часть номера телефона.

"1 (555) 555-5555 x100" -> "(555) 555-5555"
"+15555555555 EXT400" -> "5555555555"
" 555-555-5555" -> "555-555-5555" (remove leading space)

По сути, мне нужны только первые 10 цифр, игнорируя первую цифру, если она равна 1, и текущее форматирование в первые 10 цифр ("()" или "" или "-") если это возможно сохранить.

Если бы все можно было переформатировать в (555) 555-5555, это было бы бонусом, но не обязательно.Я мог бы сделать это 2-й запрос, если это необходимо.

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете использовать для этого REGEXP_REPLACE.Предполагая, что вы используете MariaDB 10.0.5 или более поздней версии, вы можете использовать PCRE регулярные выражения.Для ваших примеров выражений это регулярное выражение даст вам желаемые результаты ( демонстрация на Regex101 ).Он ищет 3 группы чисел (3 цифры, 3 цифры, а затем 4 цифры), которым, возможно, предшествует 1, а вокруг них - другие нецифровые символы (например, +, -).

^(?:\D*)1?(?:\D*)(\d{3})(?:\D*)(\d{3})(?:\D*)(\d{4}).*$

Итак, ваше заявление UPDATE станет

UPDATE `CompanyPhone` SET `number`= REGEXP_REPLACE(`number`, '^(?:\\D*)1?(?:\\D*)(\\d{3})(?:\\D*)(\\d{3})(?:\\D*)(\\d{4}).*$', '(\\1) \\2-\\3')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...