Вышеупомянутые решения лучше, особенно при использовании Java и встречают больше номеров с более чем 10 цифрами, таких как префикс международного кода или дополнительные внутренние номера. Это базовое решение (я новичок в мире регулярных выражений), разработанное с учетом телефонных номеров США и полезно только для строк, содержащих всего 10 чисел, возможно, с некоторыми символами форматирования или, возможно, вообще без символов форматирования (всего 10 номеров ). Поэтому я бы рекомендовал это решение только для полуавтоматических приложений. Я лично предпочитаю хранить числа в виде 10 номеров без символов форматирования, но также хочу иметь возможность преобразовывать или очищать телефонные номера в стандартный формат, который обычные люди и приложения / телефоны распознают мгновенно по желанию.
Я наткнулся на этот пост в поисках чего-то, что можно было бы использовать с приложением для очистки текста, которое имеет возможности PCRE Regex (но не java-функции). Я опубликую это здесь для людей, которые могли бы использовать простое решение на чистом Regex, которое могло бы работать во множестве текстовых редакторов, очистителей, расширителей или даже некоторых менеджеров буфера обмена. Я лично использую Sublime и TextSoap. Это решение было разработано для текстового мыла, поскольку оно находится в строке меню и предоставляет раскрывающееся меню, в котором вы можете запускать действия по манипулированию текстом над тем, что выбрано курсором или что находится в буфере обмена.
Мой подход заключается в двух регулярных выражениях замены / поиска и замены. Каждый поиск и замена с заменой включает в себя два регулярных выражения, одно для поиска и одно для замены.
Замена / поиск и замена # 1
- Первая подстановка / поиск и замена удаляет нечисловые числа из 10-значного числа в 10-значную строку.
Первая замена / регулярное выражение поиска :\D
- Эта строка поиска соответствует всем символам , что является не цифра.
Первая подстановка / замена регулярного выражения: "" (ничего, даже пробел)
- Оставьте поле замены полностью пустым, пробелов не должно быть. Это приведет к удалению всех совпавших нецифровых символов. Перед этой операцией вы должны были ввести 10 цифр + символы форматирования и получить 10 цифр без символов форматирования.
Замена / поиск и замена # 2
- Вторая замена / поиск и замена поиск части операции захваты группы для кода области
$1, улавливающей группы для второго набора из трех чисел $2, а последний захват группы за последний набор из четырех чисел $3. Регулярное выражение для замещающей части операции вставляет форматирование номера телефона в США между захваченной группой цифр.
Вторая замена / регулярное выражение поиска :(\d{3})(\d{3})(\d{4})
Вторая подстановка / замена регулярного выражения:\($1\) $2\-$3
Обратный слэш \экранирует специальные символы (, ), (<-whitespace), и -так как мы вставляя их между нашими захваченными числами в группах захвата $1, $2, и $3для целей форматирования номера телефона в США.
В TextSoap я создал специальный очиститель, который включает в себя два действия операции подстановки, поэтому на практике он выглядит идентично выполнению сценария. Я уверен, что это решение можно улучшить, но я ожидаю, что сложность немного возрастет. Усовершенствованная версия этого решения приветствуется в качестве учебного опыта, если кто-то хочет что-то добавить к этому.