Powyższe rozwiązania są lepsze, zwłaszcza w przypadku korzystania z języka Java i napotkania większej liczby numerów z więcej niż 10 cyframi, takich jak międzynarodowy prefiks kodu lub dodatkowe numery wewnętrzne. To rozwiązanie jest podstawowe (jestem początkującym w świecie wyrażeń regularnych) i zostało zaprojektowane z myślą o numerach telefonów w Stanach Zjednoczonych i jest użyteczne tylko w przypadku ciągów zawierających tylko 10 cyfr z pewnymi znakami formatującymi lub bez znaków formatujących (tylko 10 cyfr ). W związku z tym polecałbym to rozwiązanie tylko do aplikacji półautomatycznych. Osobiście wolę przechowywać liczby jako tylko 10 liczb bez formatowania znaków, ale chcę również mieć możliwość konwertowania lub czyszczenia numerów telefonów do standardowego formatu, które normalni ludzie i aplikacje / telefony rozpoznają natychmiast.
Natknąłem się na ten post, szukając czegoś, czego mógłbym użyć z aplikacją do czyszczenia tekstu, która ma możliwości PCRE Regex (ale nie ma funkcji java). Opublikuję to tutaj dla osób, które mogłyby skorzystać z prostego, czystego rozwiązania Regex, które mogłoby działać w różnych edytorach tekstu, programach czyszczących, ekspanderach, a nawet niektórych menedżerach schowka. Osobiście używam Sublime i TextSoap. To rozwiązanie zostało stworzone dla Text Soap, ponieważ znajduje się na pasku menu i zapewnia rozwijane menu, w którym można wywołać akcje manipulacji tekstem na tym, co jest zaznaczone kursorem lub co jest w schowku.
Moje podejście polega zasadniczo na dwóch podstawieniach / wyszukiwaniu i zamianie wyrażeń regularnych. Każde wyszukiwanie i zamiana przez podstawienie obejmuje dwa wyrażenia regularne, jeden do wyszukiwania i jeden do zamiany.
Zastąpienie / Wyszukaj i zamień nr 1
- Pierwsze podstawienie / wyszukiwanie i zamiana usuwa liczby nienumeryczne z 10-cyfrowej liczby w innym przypadku do 10-cyfrowego ciągu.
Pierwsze podstawienie / wyrażenie regularne wyszukiwania :\D
- Ten ciąg wyszukiwania obejmuje wszystkie znaki, które nie są cyframi.
Pierwsze podstawienie / zastąpienie wyrażenia regularnego: „” (nic, nawet spacja)
- Pozostaw pole zastępcze całkowicie puste, nie powinno być żadnych odstępów, w tym spacji. Spowoduje to usunięcie wszystkich pasujących znaków niebędących cyframi. Powinieneś był wprowadzić 10 cyfr + znaki formatujące przed tą operacją i wyjść z 10 cyframi bez znaków formatujących.
Zastąpienie / Wyszukaj i zamień nr 2
- Drugi podstawienie / wyszukiwania i zamiany wyszukiwarki część grup przechwytuje operację dla numerem kierunkowym
$1
, grupy przechwytującej na drugi zestaw trzech liczb $2
, a ostatnia grupa przechwytywania za ostatni zestaw czterech cyfr $3
. Wyrażenie regularne dla części zastępczej operacji wstawia formatowanie numeru telefonu w Stanach Zjednoczonych między przechwyconą grupę cyfr.
Drugie zastąpienie / wyrażenie regularne wyszukiwania :(\d{3})(\d{3})(\d{4})
Drugie zastąpienie / zastąpienie wyrażenia regularnego:\($1\) $2\-$3
Odwrotny ukośnik \
ucieka znaki specjalne (
, )
,
(<-whitespace), a -
ponieważ jesteśmy wkładając je między naszymi przechwyconych numerów w grupach przechwytujących $1
, $2
, i $3
do celów formatowania numer telefonu w USA.
W TextSoap stworzyłem niestandardowy środek czyszczący, który zawiera dwie akcje operacji zastępowania, więc w praktyce wygląda to tak samo, jak wykonanie skryptu. Jestem pewien, że to rozwiązanie można by ulepszyć, ale oczekuję, że złożoność znacznie wzrośnie. Ulepszona wersja tego rozwiązania jest mile widziana jako doświadczenie edukacyjne, jeśli ktoś chce coś do tego dodać.